drive_api_url_generator_unittest.cc 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. // Copyright (c) 2013 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "google_apis/drive/drive_api_url_generator.h"
  5. #include <stddef.h>
  6. #include <stdint.h>
  7. #include "google_apis/common/test_util.h"
  8. #include "testing/gtest/include/gtest/gtest.h"
  9. #include "url/gurl.h"
  10. #include "url/url_util.h"
  11. namespace google_apis {
  12. namespace {
  13. // The URLs used for production may be different for Chromium OS and Chrome
  14. // OS, so use testing base urls.
  15. const char kBaseUrlForTesting[] = "https://www.example.com";
  16. const char kBaseThumbnailUrlForTesting[] = "https://thumbnail.example.com";
  17. } // namespace
  18. class DriveApiUrlGeneratorTest : public testing::Test {
  19. public:
  20. DriveApiUrlGeneratorTest()
  21. : url_generator_(GURL(kBaseUrlForTesting),
  22. GURL(kBaseThumbnailUrlForTesting)) {
  23. url::AddStandardScheme("chrome-extension", url::SCHEME_WITH_HOST);
  24. }
  25. protected:
  26. DriveApiUrlGenerator url_generator_;
  27. private:
  28. url::ScopedSchemeRegistryForTests scoped_registry_;
  29. };
  30. // Make sure the hard-coded urls are returned.
  31. TEST_F(DriveApiUrlGeneratorTest, GetAboutGetUrl) {
  32. EXPECT_EQ("https://www.example.com/drive/v2/about",
  33. url_generator_.GetAboutGetUrl().spec());
  34. }
  35. TEST_F(DriveApiUrlGeneratorTest, GetFilesGetUrl) {
  36. // |file_id| should be embedded into the url.
  37. EXPECT_EQ(
  38. "https://www.example.com/drive/v2/files/0ADK06pfg"
  39. "?supportsTeamDrives=true",
  40. url_generator_.GetFilesGetUrl("0ADK06pfg", GURL()).spec());
  41. EXPECT_EQ(
  42. "https://www.example.com/drive/v2/files/0Bz0bd074"
  43. "?supportsTeamDrives=true",
  44. url_generator_.GetFilesGetUrl("0Bz0bd074", GURL()).spec());
  45. EXPECT_EQ(
  46. "https://www.example.com/drive/v2/files/file%3Afile_id"
  47. "?supportsTeamDrives=true",
  48. url_generator_.GetFilesGetUrl("file:file_id", GURL()).spec());
  49. }
  50. TEST_F(DriveApiUrlGeneratorTest, GetFilesInsertUrl) {
  51. EXPECT_EQ("https://www.example.com/drive/v2/files?supportsTeamDrives=true",
  52. url_generator_.GetFilesInsertUrl("").spec());
  53. EXPECT_EQ(
  54. "https://www.example.com/drive/v2/"
  55. "files?supportsTeamDrives=true&visibility=DEFAULT",
  56. url_generator_.GetFilesInsertUrl("DEFAULT").spec());
  57. EXPECT_EQ(
  58. "https://www.example.com/drive/v2/"
  59. "files?supportsTeamDrives=true&visibility=PRIVATE",
  60. url_generator_.GetFilesInsertUrl("PRIVATE").spec());
  61. }
  62. TEST_F(DriveApiUrlGeneratorTest, GetFilePatchUrl) {
  63. struct TestPattern {
  64. bool set_modified_date;
  65. bool update_viewed_date;
  66. const std::string expected_query;
  67. };
  68. const TestPattern kTestPatterns[] = {
  69. {false, true, ""},
  70. {true, true, "&setModifiedDate=true"},
  71. {false, false, "&updateViewedDate=false"},
  72. {true, false, "&setModifiedDate=true&updateViewedDate=false"},
  73. };
  74. for (size_t i = 0; i < std::size(kTestPatterns); ++i) {
  75. EXPECT_EQ(
  76. "https://www.example.com/drive/v2/files/0ADK06pfg"
  77. "?supportsTeamDrives=true" +
  78. kTestPatterns[i].expected_query,
  79. url_generator_
  80. .GetFilesPatchUrl("0ADK06pfg", kTestPatterns[i].set_modified_date,
  81. kTestPatterns[i].update_viewed_date)
  82. .spec());
  83. EXPECT_EQ(
  84. "https://www.example.com/drive/v2/files/0Bz0bd074"
  85. "?supportsTeamDrives=true" +
  86. kTestPatterns[i].expected_query,
  87. url_generator_
  88. .GetFilesPatchUrl("0Bz0bd074", kTestPatterns[i].set_modified_date,
  89. kTestPatterns[i].update_viewed_date)
  90. .spec());
  91. EXPECT_EQ(
  92. "https://www.example.com/drive/v2/files/file%3Afile_id"
  93. "?supportsTeamDrives=true" +
  94. kTestPatterns[i].expected_query,
  95. url_generator_
  96. .GetFilesPatchUrl("file:file_id",
  97. kTestPatterns[i].set_modified_date,
  98. kTestPatterns[i].update_viewed_date)
  99. .spec());
  100. }
  101. }
  102. TEST_F(DriveApiUrlGeneratorTest, GetFilesCopyUrl) {
  103. // |file_id| should be embedded into the url.
  104. EXPECT_EQ(
  105. "https://www.example.com/drive/v2/files/0ADK06pfg/copy"
  106. "?supportsTeamDrives=true",
  107. url_generator_.GetFilesCopyUrl("0ADK06pfg", "").spec());
  108. EXPECT_EQ(
  109. "https://www.example.com/drive/v2/files/0Bz0bd074/copy"
  110. "?supportsTeamDrives=true",
  111. url_generator_.GetFilesCopyUrl("0Bz0bd074", "").spec());
  112. EXPECT_EQ(
  113. "https://www.example.com/drive/v2/files/file%3Afile_id/copy"
  114. "?supportsTeamDrives=true",
  115. url_generator_.GetFilesCopyUrl("file:file_id", "").spec());
  116. EXPECT_EQ(
  117. "https://www.example.com/drive/v2/files/0Bz0bd074/copy"
  118. "?supportsTeamDrives=true&visibility=DEFAULT",
  119. url_generator_.GetFilesCopyUrl("0Bz0bd074", "DEFAULT").spec());
  120. EXPECT_EQ(
  121. "https://www.example.com/drive/v2/files/file%3Afile_id/copy"
  122. "?supportsTeamDrives=true&visibility=PRIVATE",
  123. url_generator_.GetFilesCopyUrl("file:file_id", "PRIVATE").spec());
  124. }
  125. TEST_F(DriveApiUrlGeneratorTest, GetFilesListUrl) {
  126. struct TestPattern {
  127. int max_results;
  128. const std::string page_token;
  129. const std::string q;
  130. const std::string expected_query;
  131. };
  132. const TestPattern kTestPatterns[] = {
  133. {100, "", "", ""},
  134. {150, "", "", "maxResults=150"},
  135. {10, "", "", "maxResults=10"},
  136. {100, "token", "", "pageToken=token"},
  137. {150, "token", "", "maxResults=150&pageToken=token"},
  138. {10, "token", "", "maxResults=10&pageToken=token"},
  139. {100, "", "query", "q=query"},
  140. {150, "", "query", "maxResults=150&q=query"},
  141. {10, "", "query", "maxResults=10&q=query"},
  142. {100, "token", "query", "pageToken=token&q=query"},
  143. {150, "token", "query", "maxResults=150&pageToken=token&q=query"},
  144. {10, "token", "query", "maxResults=10&pageToken=token&q=query"},
  145. };
  146. const std::string kV2FilesUrlPrefixWithTeamDrives =
  147. "https://www.example.com/drive/v2/files?supportsTeamDrives=true&"
  148. "includeTeamDriveItems=true&corpora=default%2CallTeamDrives";
  149. for (size_t i = 0; i < std::size(kTestPatterns); ++i) {
  150. EXPECT_EQ(kV2FilesUrlPrefixWithTeamDrives +
  151. (kTestPatterns[i].expected_query.empty() ? "" : "&") +
  152. kTestPatterns[i].expected_query,
  153. url_generator_
  154. .GetFilesListUrl(kTestPatterns[i].max_results,
  155. kTestPatterns[i].page_token,
  156. FilesListCorpora::ALL_TEAM_DRIVES,
  157. std::string(), kTestPatterns[i].q)
  158. .spec());
  159. }
  160. EXPECT_EQ(
  161. "https://www.example.com/drive/v2/files?supportsTeamDrives=true&"
  162. "includeTeamDriveItems=true&corpora=teamDrive&"
  163. "teamDriveId=TheTeamDriveId&q=query",
  164. url_generator_
  165. .GetFilesListUrl(100, std::string() /* page_token */,
  166. FilesListCorpora::TEAM_DRIVE, "TheTeamDriveId",
  167. "query")
  168. .spec());
  169. // includeTeamDriveItems should be true for default corpora, so that a file
  170. // that is shared individually is listed for users who are not member of the
  171. // Team Drive which owns the file.
  172. EXPECT_EQ(
  173. "https://www.example.com/drive/v2/files?supportsTeamDrives=true&"
  174. "includeTeamDriveItems=true&corpora=default",
  175. url_generator_
  176. .GetFilesListUrl(100, std::string() /* page_token */,
  177. FilesListCorpora::DEFAULT, std::string(),
  178. std::string())
  179. .spec());
  180. }
  181. TEST_F(DriveApiUrlGeneratorTest, GetFilesDeleteUrl) {
  182. // |file_id| should be embedded into the url.
  183. EXPECT_EQ(
  184. "https://www.example.com/drive/v2/files/0ADK06pfg?"
  185. "supportsTeamDrives=true",
  186. url_generator_.GetFilesDeleteUrl("0ADK06pfg").spec());
  187. EXPECT_EQ(
  188. "https://www.example.com/drive/v2/files/0Bz0bd074?"
  189. "supportsTeamDrives=true",
  190. url_generator_.GetFilesDeleteUrl("0Bz0bd074").spec());
  191. EXPECT_EQ(
  192. "https://www.example.com/drive/v2/files/file%3Afile_id?"
  193. "supportsTeamDrives=true",
  194. url_generator_.GetFilesDeleteUrl("file:file_id").spec());
  195. }
  196. TEST_F(DriveApiUrlGeneratorTest, GetFilesTrashUrl) {
  197. // |file_id| should be embedded into the url.
  198. EXPECT_EQ(
  199. "https://www.example.com/drive/v2/files/0ADK06pfg/trash?"
  200. "supportsTeamDrives=true",
  201. url_generator_.GetFilesTrashUrl("0ADK06pfg").spec());
  202. EXPECT_EQ(
  203. "https://www.example.com/drive/v2/files/0Bz0bd074/trash?"
  204. "supportsTeamDrives=true",
  205. url_generator_.GetFilesTrashUrl("0Bz0bd074").spec());
  206. EXPECT_EQ(
  207. "https://www.example.com/drive/v2/files/file%3Afile_id/trash?"
  208. "supportsTeamDrives=true",
  209. url_generator_.GetFilesTrashUrl("file:file_id").spec());
  210. }
  211. TEST_F(DriveApiUrlGeneratorTest, GetChangesListUrl) {
  212. struct TestPattern {
  213. bool include_deleted;
  214. int max_results;
  215. const std::string page_token;
  216. int64_t start_change_id;
  217. const std::string expected_query;
  218. };
  219. const TestPattern kTestPatterns[] = {
  220. {true, 100, "", 0, ""},
  221. {false, 100, "", 0, "includeDeleted=false"},
  222. {true, 150, "", 0, "maxResults=150"},
  223. {false, 150, "", 0, "includeDeleted=false&maxResults=150"},
  224. {true, 10, "", 0, "maxResults=10"},
  225. {false, 10, "", 0, "includeDeleted=false&maxResults=10"},
  226. {true, 100, "token", 0, "pageToken=token"},
  227. {false, 100, "token", 0, "includeDeleted=false&pageToken=token"},
  228. {true, 150, "token", 0, "maxResults=150&pageToken=token"},
  229. {false, 150, "token", 0,
  230. "includeDeleted=false&maxResults=150&pageToken=token"},
  231. {true, 10, "token", 0, "maxResults=10&pageToken=token"},
  232. {false, 10, "token", 0,
  233. "includeDeleted=false&maxResults=10&pageToken=token"},
  234. {true, 100, "", 12345, "startChangeId=12345"},
  235. {false, 100, "", 12345, "includeDeleted=false&startChangeId=12345"},
  236. {true, 150, "", 12345, "maxResults=150&startChangeId=12345"},
  237. {false, 150, "", 12345,
  238. "includeDeleted=false&maxResults=150&startChangeId=12345"},
  239. {true, 10, "", 12345, "maxResults=10&startChangeId=12345"},
  240. {false, 10, "", 12345,
  241. "includeDeleted=false&maxResults=10&startChangeId=12345"},
  242. {true, 100, "token", 12345, "pageToken=token&startChangeId=12345"},
  243. {false, 100, "token", 12345,
  244. "includeDeleted=false&pageToken=token&startChangeId=12345"},
  245. {true, 150, "token", 12345,
  246. "maxResults=150&pageToken=token&startChangeId=12345"},
  247. {false, 150, "token", 12345,
  248. "includeDeleted=false&maxResults=150&pageToken=token"
  249. "&startChangeId=12345"},
  250. {true, 10, "token", 12345,
  251. "maxResults=10&pageToken=token&startChangeId=12345"},
  252. {false, 10, "token", 12345,
  253. "includeDeleted=false&maxResults=10&pageToken=token"
  254. "&startChangeId=12345"},
  255. };
  256. const std::string kV2ChangesUrlPrefixWithTeamDrives =
  257. "https://www.example.com/drive/v2/changes?"
  258. "supportsTeamDrives=true&includeTeamDriveItems=true";
  259. for (size_t i = 0; i < std::size(kTestPatterns); ++i) {
  260. EXPECT_EQ(kV2ChangesUrlPrefixWithTeamDrives +
  261. (kTestPatterns[i].expected_query.empty() ? "" : "&") +
  262. kTestPatterns[i].expected_query,
  263. url_generator_
  264. .GetChangesListUrl(
  265. kTestPatterns[i].include_deleted,
  266. kTestPatterns[i].max_results, kTestPatterns[i].page_token,
  267. kTestPatterns[i].start_change_id, "" /* team_drive_id */)
  268. .spec());
  269. }
  270. EXPECT_EQ(kV2ChangesUrlPrefixWithTeamDrives + "&teamDriveId=TEAM_DRIVE_ID",
  271. url_generator_.GetChangesListUrl(true, 100, "", 0, "TEAM_DRIVE_ID")
  272. .spec());
  273. }
  274. TEST_F(DriveApiUrlGeneratorTest, GetChildrenInsertUrl) {
  275. // |file_id| should be embedded into the url.
  276. EXPECT_EQ(
  277. "https://www.example.com/drive/v2/files/0ADK06pfg/children?"
  278. "supportsTeamDrives=true",
  279. url_generator_.GetChildrenInsertUrl("0ADK06pfg").spec());
  280. EXPECT_EQ(
  281. "https://www.example.com/drive/v2/files/0Bz0bd074/children?"
  282. "supportsTeamDrives=true",
  283. url_generator_.GetChildrenInsertUrl("0Bz0bd074").spec());
  284. EXPECT_EQ(
  285. "https://www.example.com/drive/v2/files/file%3Afolder_id/children?"
  286. "supportsTeamDrives=true",
  287. url_generator_.GetChildrenInsertUrl("file:folder_id").spec());
  288. }
  289. TEST_F(DriveApiUrlGeneratorTest, GetChildrenDeleteUrl) {
  290. // |file_id| should be embedded into the url.
  291. EXPECT_EQ(
  292. "https://www.example.com/drive/v2/files/0ADK06pfg/children/0Bz0bd074",
  293. url_generator_.GetChildrenDeleteUrl("0Bz0bd074", "0ADK06pfg").spec());
  294. EXPECT_EQ(
  295. "https://www.example.com/drive/v2/files/0Bz0bd074/children/0ADK06pfg",
  296. url_generator_.GetChildrenDeleteUrl("0ADK06pfg", "0Bz0bd074").spec());
  297. EXPECT_EQ(
  298. "https://www.example.com/drive/v2/files/file%3Afolder_id/children"
  299. "/file%3Achild_id",
  300. url_generator_.GetChildrenDeleteUrl("file:child_id", "file:folder_id")
  301. .spec());
  302. }
  303. TEST_F(DriveApiUrlGeneratorTest, GetInitiateUploadNewFileUrl) {
  304. const bool kSetModifiedDate = true;
  305. EXPECT_EQ(
  306. "https://www.example.com/upload/drive/v2/files?uploadType=resumable"
  307. "&supportsTeamDrives=true",
  308. url_generator_.GetInitiateUploadNewFileUrl(!kSetModifiedDate).spec());
  309. EXPECT_EQ(
  310. "https://www.example.com/upload/drive/v2/files?uploadType=resumable"
  311. "&supportsTeamDrives=true&setModifiedDate=true",
  312. url_generator_.GetInitiateUploadNewFileUrl(kSetModifiedDate).spec());
  313. }
  314. TEST_F(DriveApiUrlGeneratorTest, GetInitiateUploadExistingFileUrl) {
  315. const bool kSetModifiedDate = true;
  316. // |resource_id| should be embedded into the url.
  317. EXPECT_EQ(
  318. "https://www.example.com/upload/drive/v2/files/0ADK06pfg"
  319. "?uploadType=resumable&supportsTeamDrives=true",
  320. url_generator_
  321. .GetInitiateUploadExistingFileUrl("0ADK06pfg", !kSetModifiedDate)
  322. .spec());
  323. EXPECT_EQ(
  324. "https://www.example.com/upload/drive/v2/files/0Bz0bd074"
  325. "?uploadType=resumable&supportsTeamDrives=true",
  326. url_generator_
  327. .GetInitiateUploadExistingFileUrl("0Bz0bd074", !kSetModifiedDate)
  328. .spec());
  329. EXPECT_EQ(
  330. "https://www.example.com/upload/drive/v2/files/file%3Afile_id"
  331. "?uploadType=resumable&supportsTeamDrives=true",
  332. url_generator_
  333. .GetInitiateUploadExistingFileUrl("file:file_id", !kSetModifiedDate)
  334. .spec());
  335. EXPECT_EQ(
  336. "https://www.example.com/upload/drive/v2/files/file%3Afile_id"
  337. "?uploadType=resumable&supportsTeamDrives=true&setModifiedDate=true",
  338. url_generator_
  339. .GetInitiateUploadExistingFileUrl("file:file_id", kSetModifiedDate)
  340. .spec());
  341. }
  342. TEST_F(DriveApiUrlGeneratorTest, GetMultipartUploadNewFileUrl) {
  343. const bool kSetModifiedDate = true;
  344. EXPECT_EQ(
  345. "https://www.example.com/upload/drive/v2/files?uploadType=multipart"
  346. "&supportsTeamDrives=true",
  347. url_generator_.GetMultipartUploadNewFileUrl(!kSetModifiedDate).spec());
  348. EXPECT_EQ(
  349. "https://www.example.com/upload/drive/v2/files?uploadType=multipart&"
  350. "supportsTeamDrives=true&setModifiedDate=true",
  351. url_generator_.GetMultipartUploadNewFileUrl(kSetModifiedDate).spec());
  352. }
  353. TEST_F(DriveApiUrlGeneratorTest, GetMultipartUploadExistingFileUrl) {
  354. const bool kSetModifiedDate = true;
  355. // |resource_id| should be embedded into the url.
  356. EXPECT_EQ(
  357. "https://www.example.com/upload/drive/v2/files/0ADK06pfg"
  358. "?uploadType=multipart&supportsTeamDrives=true",
  359. url_generator_
  360. .GetMultipartUploadExistingFileUrl("0ADK06pfg", !kSetModifiedDate)
  361. .spec());
  362. EXPECT_EQ(
  363. "https://www.example.com/upload/drive/v2/files/0Bz0bd074"
  364. "?uploadType=multipart&supportsTeamDrives=true",
  365. url_generator_
  366. .GetMultipartUploadExistingFileUrl("0Bz0bd074", !kSetModifiedDate)
  367. .spec());
  368. EXPECT_EQ(
  369. "https://www.example.com/upload/drive/v2/files/file%3Afile_id"
  370. "?uploadType=multipart&supportsTeamDrives=true",
  371. url_generator_
  372. .GetMultipartUploadExistingFileUrl("file:file_id", !kSetModifiedDate)
  373. .spec());
  374. EXPECT_EQ(
  375. "https://www.example.com/upload/drive/v2/files/file%3Afile_id"
  376. "?uploadType=multipart&supportsTeamDrives=true&setModifiedDate=true",
  377. url_generator_
  378. .GetMultipartUploadExistingFileUrl("file:file_id", kSetModifiedDate)
  379. .spec());
  380. }
  381. TEST_F(DriveApiUrlGeneratorTest, GenerateDownloadFileUrl) {
  382. EXPECT_EQ(
  383. "https://www.example.com/drive/v2/files/resourceId?alt=media"
  384. "&supportsTeamDrives=true",
  385. url_generator_.GenerateDownloadFileUrl("resourceId").spec());
  386. EXPECT_EQ(
  387. "https://www.example.com/drive/v2/files/file%3AresourceId?alt=media"
  388. "&supportsTeamDrives=true",
  389. url_generator_.GenerateDownloadFileUrl("file:resourceId").spec());
  390. }
  391. TEST_F(DriveApiUrlGeneratorTest, GeneratePermissionsInsertUrl) {
  392. EXPECT_EQ(
  393. "https://www.example.com/drive/v2/files/0ADK06pfg/permissions"
  394. "?supportsTeamDrives=true",
  395. url_generator_.GetPermissionsInsertUrl("0ADK06pfg").spec());
  396. }
  397. TEST_F(DriveApiUrlGeneratorTest, GenerateThumbnailUrl) {
  398. EXPECT_EQ(
  399. "https://thumbnail.example.com/d/0ADK06pfg=w500-h480",
  400. url_generator_.GetThumbnailUrl("0ADK06pfg", 500, 480, false).spec());
  401. EXPECT_EQ("https://thumbnail.example.com/d/0ADK06pfg=w360-h380-c",
  402. url_generator_.GetThumbnailUrl("0ADK06pfg", 360, 380, true).spec());
  403. }
  404. TEST_F(DriveApiUrlGeneratorTest, BatchUploadUrl) {
  405. EXPECT_EQ("https://www.example.com/upload/drive?supportsTeamDrives=true",
  406. url_generator_.GetBatchUploadUrl().spec());
  407. }
  408. TEST_F(DriveApiUrlGeneratorTest, GenerateTeamDriveListUrl) {
  409. EXPECT_EQ("https://www.example.com/drive/v2/teamdrives",
  410. url_generator_.GetTeamDriveListUrl(10, "").spec());
  411. EXPECT_EQ("https://www.example.com/drive/v2/teamdrives?maxResults=100",
  412. url_generator_.GetTeamDriveListUrl(100, "").spec());
  413. EXPECT_EQ(
  414. "https://www.example.com/drive/v2/"
  415. "teamdrives?maxResults=100&pageToken=theToken",
  416. url_generator_.GetTeamDriveListUrl(100, "theToken").spec());
  417. }
  418. TEST_F(DriveApiUrlGeneratorTest, GeneraeStartPageTokenUrl) {
  419. EXPECT_EQ(
  420. "https://www.example.com/drive/v2/changes/"
  421. "startPageToken?supportsTeamDrives=true",
  422. url_generator_.GetStartPageTokenUrl("").spec());
  423. EXPECT_EQ(
  424. "https://www.example.com/drive/v2/changes/"
  425. "startPageToken?supportsTeamDrives=true&teamDriveId=team_drive_id",
  426. url_generator_.GetStartPageTokenUrl("team_drive_id").spec());
  427. }
  428. } // namespace google_apis