| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 400 std::string custom_page_url; | 405 std::string custom_page_url; |
| 401 if (Tokenize(query, std::string("&"), ¶ms)) { | 406 if (Tokenize(query, std::string("&"), ¶ms)) { |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |