Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(288)

Side by Side Diff: chrome/browser/ui/webui/feedback_ui.cc

Issue 12737006: Allow feedback form to be shown in an App Launcher feedback mode. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Touch up rebase Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/resources/feedback.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/feedback_ui.h" 5 #include "chrome/browser/ui/webui/feedback_ui.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/base64.h" 10 #include "base/base64.h"
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 // for this functionality since we need to make *sure* we never get 196 // for this functionality since we need to make *sure* we never get
197 // instantiated again while we are open - with singleton tabs, that can 197 // instantiated again while we are open - with singleton tabs, that can
198 // happen). 198 // happen).
199 int feedback_tab_index = GetIndexOfFeedbackTab(browser); 199 int feedback_tab_index = GetIndexOfFeedbackTab(browser);
200 if (feedback_tab_index >= 0) { 200 if (feedback_tab_index >= 0) {
201 // Do not refresh screenshot, do not create a new tab. 201 // Do not refresh screenshot, do not create a new tab.
202 browser->tab_strip_model()->ActivateTabAt(feedback_tab_index, true); 202 browser->tab_strip_model()->ActivateTabAt(feedback_tab_index, true);
203 return; 203 return;
204 } 204 }
205 205
206 std::vector<unsigned char>* last_screenshot_png = 206 if (category_tag != kAppLauncherCategoryTag) {
207 FeedbackUtil::GetScreenshotPng(); 207 std::vector<unsigned char>* last_screenshot_png =
208 last_screenshot_png->clear(); 208 FeedbackUtil::GetScreenshotPng();
209 last_screenshot_png->clear();
209 210
210 gfx::NativeWindow native_window; 211 gfx::NativeWindow native_window;
211 gfx::Rect snapshot_bounds; 212 gfx::Rect snapshot_bounds;
212 213
213 #if defined(OS_CHROMEOS) 214 #if defined(OS_CHROMEOS)
214 // For ChromeOS, don't use the browser window but the root window 215 // For ChromeOS, don't use the browser window but the root window
215 // instead to grab the screenshot. We want everything on the screen, not 216 // instead to grab the screenshot. We want everything on the screen, not
216 // just the current browser. 217 // just the current browser.
217 native_window = ash::Shell::GetPrimaryRootWindow(); 218 native_window = ash::Shell::GetPrimaryRootWindow();
218 snapshot_bounds = gfx::Rect(native_window->bounds()); 219 snapshot_bounds = gfx::Rect(native_window->bounds());
219 #else 220 #else
220 native_window = browser->window()->GetNativeWindow(); 221 native_window = browser->window()->GetNativeWindow();
221 snapshot_bounds = gfx::Rect(browser->window()->GetBounds().size()); 222 snapshot_bounds = gfx::Rect(browser->window()->GetBounds().size());
222 #endif 223 #endif
223 bool success = chrome::GrabWindowSnapshotForUser(native_window, 224 bool success = chrome::GrabWindowSnapshotForUser(native_window,
224 last_screenshot_png, 225 last_screenshot_png,
225 snapshot_bounds); 226 snapshot_bounds);
226 FeedbackUtil::SetScreenshotSize(success ? snapshot_bounds : gfx::Rect()); 227 FeedbackUtil::SetScreenshotSize(success ? snapshot_bounds : gfx::Rect());
227 228 }
228 std::string feedback_url = std::string(chrome::kChromeUIFeedbackURL) + "?" + 229 std::string feedback_url = std::string(chrome::kChromeUIFeedbackURL) + "?" +
229 kSessionIDParameter + base::IntToString(browser->session_id().id()) + 230 kSessionIDParameter + base::IntToString(browser->session_id().id()) +
230 "&" + kTabIndexParameter + 231 "&" + kTabIndexParameter +
231 base::IntToString(browser->tab_strip_model()->active_index()) + 232 base::IntToString(browser->tab_strip_model()->active_index()) +
232 "&" + kDescriptionParameter + 233 "&" + kDescriptionParameter +
233 net::EscapeUrlEncodedData(description_template, false) + "&" + 234 net::EscapeUrlEncodedData(description_template, false) + "&" +
234 kCategoryTagParameter + net::EscapeUrlEncodedData(category_tag, false); 235 kCategoryTagParameter + net::EscapeUrlEncodedData(category_tag, false);
235 236
236 #if defined(OS_CHROMEOS) 237 #if defined(OS_CHROMEOS)
237 feedback_url = feedback_url + "&" + kTimestampParameter + 238 feedback_url = feedback_url + "&" + kTimestampParameter +
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 void SetupScreenshotsSource(); 276 void SetupScreenshotsSource();
276 void ClobberScreenshotsSource(); 277 void ClobberScreenshotsSource();
277 278
278 void CloseFeedbackTab(); 279 void CloseFeedbackTab();
279 280
280 WebContents* tab_; 281 WebContents* tab_;
281 ScreenshotSource* screenshot_source_; 282 ScreenshotSource* screenshot_source_;
282 283
283 scoped_refptr<FeedbackData> feedback_data_; 284 scoped_refptr<FeedbackData> feedback_data_;
284 std::string target_tab_url_; 285 std::string target_tab_url_;
286 std::string category_tag_;
285 #if defined(OS_CHROMEOS) 287 #if defined(OS_CHROMEOS)
286 // Timestamp of when the feedback request was initiated. 288 // Timestamp of when the feedback request was initiated.
287 std::string timestamp_; 289 std::string timestamp_;
288 #endif 290 #endif
289 291
290 DISALLOW_COPY_AND_ASSIGN(FeedbackHandler); 292 DISALLOW_COPY_AND_ASSIGN(FeedbackHandler);
291 }; 293 };
292 294
293 content::WebUIDataSource* CreateFeedbackUIHTMLSource(bool successful_init) { 295 content::WebUIDataSource* CreateFeedbackUIHTMLSource(bool successful_init) {
294 content::WebUIDataSource* source = 296 content::WebUIDataSource* source =
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 source->AddLocalizedString("noscreenshot", 332 source->AddLocalizedString("noscreenshot",
331 IDS_FEEDBACK_INCLUDE_NO_SCREENSHOT); 333 IDS_FEEDBACK_INCLUDE_NO_SCREENSHOT);
332 334
333 source->AddLocalizedString("send-report", IDS_FEEDBACK_SEND_REPORT); 335 source->AddLocalizedString("send-report", IDS_FEEDBACK_SEND_REPORT);
334 source->AddLocalizedString("cancel", IDS_CANCEL); 336 source->AddLocalizedString("cancel", IDS_CANCEL);
335 337
336 source->AddLocalizedString("no-description", IDS_FEEDBACK_NO_DESCRIPTION); 338 source->AddLocalizedString("no-description", IDS_FEEDBACK_NO_DESCRIPTION);
337 source->AddLocalizedString("no-saved-screenshots", 339 source->AddLocalizedString("no-saved-screenshots",
338 IDS_FEEDBACK_NO_SAVED_SCREENSHOTS_HELP); 340 IDS_FEEDBACK_NO_SAVED_SCREENSHOTS_HELP);
339 source->AddLocalizedString("privacy-note", IDS_FEEDBACK_PRIVACY_NOTE); 341 source->AddLocalizedString("privacy-note", IDS_FEEDBACK_PRIVACY_NOTE);
342 source->AddLocalizedString("launcher-title", IDS_FEEDBACK_LAUNCHER_TITLE);
343 source->AddLocalizedString("launcher-description",
344 IDS_FEEDBACK_LAUNCHER_DESCRIPTION_LABEL);
340 345
341 source->SetJsonPath("strings.js"); 346 source->SetJsonPath("strings.js");
342 source->AddResourcePath("feedback.js", IDR_FEEDBACK_JS); 347 source->AddResourcePath("feedback.js", IDR_FEEDBACK_JS);
343 source->SetDefaultResource( 348 source->SetDefaultResource(
344 successful_init ? IDR_FEEDBACK_HTML : IDR_FEEDBACK_HTML_INVALID); 349 successful_init ? IDR_FEEDBACK_HTML : IDR_FEEDBACK_HTML_INVALID);
345 350
346 return source; 351 return source;
347 } 352 }
348 353
349 //////////////////////////////////////////////////////////////////////////////// 354 ////////////////////////////////////////////////////////////////////////////////
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 std::string custom_page_url; 405 std::string custom_page_url;
401 if (Tokenize(query, std::string("&"), &params)) { 406 if (Tokenize(query, std::string("&"), &params)) {
402 for (std::vector<std::string>::iterator it = params.begin(); 407 for (std::vector<std::string>::iterator it = params.begin();
403 it != params.end(); ++it) { 408 it != params.end(); ++it) {
404 std::string query_str = *it; 409 std::string query_str = *it;
405 if (StartsWithASCII(query_str, std::string(kSessionIDParameter), true)) { 410 if (StartsWithASCII(query_str, std::string(kSessionIDParameter), true)) {
406 ReplaceFirstSubstringAfterOffset( 411 ReplaceFirstSubstringAfterOffset(
407 &query_str, 0, kSessionIDParameter, ""); 412 &query_str, 0, kSessionIDParameter, "");
408 if (!base::StringToInt(query_str, &session_id)) 413 if (!base::StringToInt(query_str, &session_id))
409 return false; 414 return false;
410 continue; 415 } else if (StartsWithASCII(*it, std::string(kTabIndexParameter), true)) {
411 }
412 if (StartsWithASCII(*it, std::string(kTabIndexParameter), true)) {
413 ReplaceFirstSubstringAfterOffset( 416 ReplaceFirstSubstringAfterOffset(
414 &query_str, 0, kTabIndexParameter, ""); 417 &query_str, 0, kTabIndexParameter, "");
415 if (!base::StringToInt(query_str, &index)) 418 if (!base::StringToInt(query_str, &index))
416 return false; 419 return false;
417 continue; 420 } else if (StartsWithASCII(*it, std::string(kCustomPageUrlParameter),
418 } 421 true)) {
419 if (StartsWithASCII(*it, std::string(kCustomPageUrlParameter), true)) {
420 ReplaceFirstSubstringAfterOffset( 422 ReplaceFirstSubstringAfterOffset(
421 &query_str, 0, kCustomPageUrlParameter, ""); 423 &query_str, 0, kCustomPageUrlParameter, "");
422 custom_page_url = query_str; 424 custom_page_url = query_str;
423 continue; 425 } else if (StartsWithASCII(*it, std::string(kCategoryTagParameter),
424 } 426 true)) {
427 ReplaceFirstSubstringAfterOffset(
428 &query_str, 0, kCategoryTagParameter, "");
429 category_tag_ = query_str;
425 #if defined(OS_CHROMEOS) 430 #if defined(OS_CHROMEOS)
426 if (StartsWithASCII(*it, std::string(kTimestampParameter), true)) { 431 } else if (StartsWithASCII(*it, std::string(kTimestampParameter), true)) {
427 ReplaceFirstSubstringAfterOffset( 432 ReplaceFirstSubstringAfterOffset(
428 &query_str, 0, kTimestampParameter, ""); 433 &query_str, 0, kTimestampParameter, "");
429 timestamp_ = query_str; 434 timestamp_ = query_str;
430 continue; 435 #endif
431 } 436 }
432 #endif
433 } 437 }
434 } 438 }
435 439
436 // If we don't have a page url specified, get it from the tab index. 440 // If we don't have a page url specified, get it from the tab index.
437 if (custom_page_url.empty()) { 441 if (custom_page_url.empty()) {
438 if (session_id == -1) 442 if (session_id == -1)
439 return false; 443 return false;
440 444
441 Browser* browser = chrome::FindBrowserWithID(session_id); 445 Browser* browser = chrome::FindBrowserWithID(session_id);
442 // Sanity checks. 446 // Sanity checks.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 base::Bind(&FeedbackHandler::HandleOpenSystemTab, 487 base::Bind(&FeedbackHandler::HandleOpenSystemTab,
484 base::Unretained(this))); 488 base::Unretained(this)));
485 } 489 }
486 490
487 void FeedbackHandler::HandleGetDialogDefaults(const ListValue*) { 491 void FeedbackHandler::HandleGetDialogDefaults(const ListValue*) {
488 feedback_data_ = new FeedbackData(); 492 feedback_data_ = new FeedbackData();
489 493
490 // Send back values which the dialog js needs initially. 494 // Send back values which the dialog js needs initially.
491 DictionaryValue dialog_defaults; 495 DictionaryValue dialog_defaults;
492 496
497 if (category_tag_ == chrome::kAppLauncherCategoryTag)
498 dialog_defaults.SetBoolean("launcherFeedback", true);
499
493 // Current url. 500 // Current url.
494 dialog_defaults.SetString("currentUrl", target_tab_url_); 501 dialog_defaults.SetString("currentUrl", target_tab_url_);
495 502
496 // Are screenshots disabled? 503 // Are screenshots disabled?
497 dialog_defaults.SetBoolean( 504 dialog_defaults.SetBoolean(
498 "disableScreenshots", 505 "disableScreenshots",
499 g_browser_process->local_state()->GetBoolean(prefs::kDisableScreenshots)); 506 g_browser_process->local_state()->GetBoolean(prefs::kDisableScreenshots));
500 507
501 // User e-mail 508 // User e-mail
502 std::string user_email = GetUserEmail(); 509 std::string user_email = GetUserEmail();
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 screenshot_filepaths.begin() + sort_size, 719 screenshot_filepaths.begin() + sort_size,
713 screenshot_filepaths.end(), 720 screenshot_filepaths.end(),
714 ScreenshotTimestampComp); 721 ScreenshotTimestampComp);
715 for (size_t i = 0; i < sort_size; ++i) 722 for (size_t i = 0; i < sort_size; ++i)
716 saved_screenshots->push_back( 723 saved_screenshots->push_back(
717 std::string(ScreenshotSource::kScreenshotUrlRoot) + 724 std::string(ScreenshotSource::kScreenshotUrlRoot) +
718 std::string(ScreenshotSource::kScreenshotSaved) + 725 std::string(ScreenshotSource::kScreenshotSaved) +
719 screenshot_filepaths[i]); 726 screenshot_filepaths[i]);
720 } 727 }
721 #endif 728 #endif
OLDNEW
« no previous file with comments | « chrome/browser/resources/feedback.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698