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

Side by Side Diff: chrome/browser/ui/webui/settings/settings_startup_pages_handler.cc

Issue 1849543006: MD Settings: validate startup URLs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@startup-browser-proxy
Patch Set: nits Created 4 years, 8 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/settings/settings_startup_pages_handler.h" 5 #include "chrome/browser/ui/webui/settings/settings_startup_pages_handler.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "chrome/browser/prefs/session_startup_pref.h" 10 #include "chrome/browser/prefs/session_startup_pref.h"
11 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/browser/ui/webui/settings_utils.h"
12 #include "chrome/common/pref_names.h" 13 #include "chrome/common/pref_names.h"
13 #include "components/url_formatter/url_fixer.h"
14 #include "content/public/browser/web_ui.h" 14 #include "content/public/browser/web_ui.h"
15 #include "url/gurl.h"
15 16
16 namespace settings { 17 namespace settings {
17 18
18 StartupPagesHandler::StartupPagesHandler(content::WebUI* webui) 19 StartupPagesHandler::StartupPagesHandler(content::WebUI* webui)
19 : startup_custom_pages_table_model_(Profile::FromWebUI(webui)) { 20 : startup_custom_pages_table_model_(Profile::FromWebUI(webui)) {
20 } 21 }
21 22
22 StartupPagesHandler::~StartupPagesHandler() { 23 StartupPagesHandler::~StartupPagesHandler() {
23 } 24 }
24 25
25 void StartupPagesHandler::RegisterMessages() { 26 void StartupPagesHandler::RegisterMessages() {
26 if (Profile::FromWebUI(web_ui())->IsOffTheRecord()) 27 if (Profile::FromWebUI(web_ui())->IsOffTheRecord())
27 return; 28 return;
28 29
29 web_ui()->RegisterMessageCallback("addStartupPage", 30 web_ui()->RegisterMessageCallback("addStartupPage",
30 base::Bind(&StartupPagesHandler::HandleAddStartupPage, 31 base::Bind(&StartupPagesHandler::HandleAddStartupPage,
31 base::Unretained(this))); 32 base::Unretained(this)));
32 web_ui()->RegisterMessageCallback("onStartupPrefsPageLoad", 33 web_ui()->RegisterMessageCallback("onStartupPrefsPageLoad",
33 base::Bind(&StartupPagesHandler::HandleOnStartupPrefsPageLoad, 34 base::Bind(&StartupPagesHandler::HandleOnStartupPrefsPageLoad,
34 base::Unretained(this))); 35 base::Unretained(this)));
35 web_ui()->RegisterMessageCallback("removeStartupPage", 36 web_ui()->RegisterMessageCallback("removeStartupPage",
36 base::Bind(&StartupPagesHandler::HandleRemoveStartupPage, 37 base::Bind(&StartupPagesHandler::HandleRemoveStartupPage,
37 base::Unretained(this))); 38 base::Unretained(this)));
38 web_ui()->RegisterMessageCallback("setStartupPagesToCurrentPages", 39 web_ui()->RegisterMessageCallback("setStartupPagesToCurrentPages",
39 base::Bind(&StartupPagesHandler::HandleSetStartupPagesToCurrentPages, 40 base::Bind(&StartupPagesHandler::HandleSetStartupPagesToCurrentPages,
40 base::Unretained(this))); 41 base::Unretained(this)));
42 web_ui()->RegisterMessageCallback("validateStartupPage",
43 base::Bind(&StartupPagesHandler::HandleValidateStartupPage,
44 base::Unretained(this)));
41 } 45 }
42 46
43 void StartupPagesHandler::RenderViewReused() { 47 void StartupPagesHandler::RenderViewReused() {
44 startup_custom_pages_table_model_.SetObserver(nullptr); 48 startup_custom_pages_table_model_.SetObserver(nullptr);
45 pref_change_registrar_.RemoveAll(); 49 pref_change_registrar_.RemoveAll();
46 } 50 }
47 51
48 void StartupPagesHandler::OnModelChanged() { 52 void StartupPagesHandler::OnModelChanged() {
49 base::ListValue startup_pages; 53 base::ListValue startup_pages;
50 int page_count = startup_custom_pages_table_model_.RowCount(); 54 int page_count = startup_custom_pages_table_model_.RowCount();
(...skipping 21 matching lines...) Expand all
72 OnModelChanged(); 76 OnModelChanged();
73 } 77 }
74 78
75 void StartupPagesHandler::OnItemsRemoved(int start, int length) { 79 void StartupPagesHandler::OnItemsRemoved(int start, int length) {
76 OnModelChanged(); 80 OnModelChanged();
77 } 81 }
78 82
79 void StartupPagesHandler::HandleAddStartupPage(const base::ListValue* args) { 83 void StartupPagesHandler::HandleAddStartupPage(const base::ListValue* args) {
80 std::string url_string; 84 std::string url_string;
81 if (!args->GetString(0, &url_string)) { 85 if (!args->GetString(0, &url_string)) {
82 DLOG(ERROR) << "Missing URL string parameter"; 86 NOTREACHED();
83 return; 87 return;
84 } 88 }
85 89
86 GURL url = url_formatter::FixupURL(url_string, std::string()); 90 GURL url;
87 if (!url.is_valid()) { 91 if (!settings_utils::FixupAndValidateStartupPage(url_string, &url)) {
88 LOG(ERROR) << "FixupURL failed on " << url_string; 92 NOTREACHED();
dschuyler 2016/03/31 20:29:26 Would these be ok as a DLOG instead of NOTREACHED(
Dan Beam 2016/03/31 22:06:55 this should never be reached as the user shouldn't
89 return; 93 return;
90 } 94 }
91 95
92 int row_count = startup_custom_pages_table_model_.RowCount(); 96 int row_count = startup_custom_pages_table_model_.RowCount();
93 int index; 97 int index;
94 if (!args->GetInteger(1, &index) || index > row_count) 98 if (!args->GetInteger(1, &index) || index > row_count)
95 index = row_count; 99 index = row_count;
96 100
97 startup_custom_pages_table_model_.Add(index, url); 101 startup_custom_pages_table_model_.Add(index, url);
98 SaveStartupPagesPref(); 102 SaveStartupPagesPref();
(...skipping 18 matching lines...) Expand all
117 base::Unretained(this))); 121 base::Unretained(this)));
118 122
119 const SessionStartupPref startup_pref = SessionStartupPref::GetStartupPref( 123 const SessionStartupPref startup_pref = SessionStartupPref::GetStartupPref(
120 Profile::FromWebUI(web_ui())->GetPrefs()); 124 Profile::FromWebUI(web_ui())->GetPrefs());
121 startup_custom_pages_table_model_.SetURLs(startup_pref.urls); 125 startup_custom_pages_table_model_.SetURLs(startup_pref.urls);
122 } 126 }
123 127
124 void StartupPagesHandler::HandleRemoveStartupPage(const base::ListValue* args) { 128 void StartupPagesHandler::HandleRemoveStartupPage(const base::ListValue* args) {
125 int selected_index; 129 int selected_index;
126 if (!args->GetInteger(0, &selected_index)) { 130 if (!args->GetInteger(0, &selected_index)) {
127 DLOG(ERROR) << "Missing index parameter"; 131 NOTREACHED();
128 return; 132 return;
129 } 133 }
130 134
131 if (selected_index < 0 || 135 if (selected_index < 0 ||
132 selected_index >= startup_custom_pages_table_model_.RowCount()) { 136 selected_index >= startup_custom_pages_table_model_.RowCount()) {
133 LOG(ERROR) << "Index out of range " << selected_index; 137 NOTREACHED();
134 return; 138 return;
135 } 139 }
136 140
137 startup_custom_pages_table_model_.Remove(selected_index); 141 startup_custom_pages_table_model_.Remove(selected_index);
138 SaveStartupPagesPref(); 142 SaveStartupPagesPref();
139 } 143 }
140 144
141 void StartupPagesHandler::HandleSetStartupPagesToCurrentPages( 145 void StartupPagesHandler::HandleSetStartupPagesToCurrentPages(
142 const base::ListValue* args) { 146 const base::ListValue* args) {
143 startup_custom_pages_table_model_.SetToCurrentlyOpenPages(); 147 startup_custom_pages_table_model_.SetToCurrentlyOpenPages();
144 SaveStartupPagesPref(); 148 SaveStartupPagesPref();
145 } 149 }
146 150
151 void StartupPagesHandler::HandleValidateStartupPage(
152 const base::ListValue* args) {
153 CHECK_EQ(args->GetSize(), 2U);
154
155 const base::Value* callback_id;
156 CHECK(args->Get(0, &callback_id));
157
158 std::string url_string;
159 CHECK(args->GetString(1, &url_string));
160
161 bool valid = settings_utils::FixupAndValidateStartupPage(url_string, nullptr);
162 ResolveJavascriptCallback(*callback_id, base::FundamentalValue(valid));
163 }
164
147 void StartupPagesHandler::SaveStartupPagesPref() { 165 void StartupPagesHandler::SaveStartupPagesPref() {
148 PrefService* prefs = Profile::FromWebUI(web_ui())->GetPrefs(); 166 PrefService* prefs = Profile::FromWebUI(web_ui())->GetPrefs();
149 167
150 SessionStartupPref pref = SessionStartupPref::GetStartupPref(prefs); 168 SessionStartupPref pref = SessionStartupPref::GetStartupPref(prefs);
151 pref.urls = startup_custom_pages_table_model_.GetURLs(); 169 pref.urls = startup_custom_pages_table_model_.GetURLs();
152 170
153 if (pref.urls.empty()) 171 if (pref.urls.empty())
154 pref.type = SessionStartupPref::DEFAULT; 172 pref.type = SessionStartupPref::DEFAULT;
155 173
156 SessionStartupPref::SetStartupPref(prefs, pref); 174 SessionStartupPref::SetStartupPref(prefs, pref);
157 } 175 }
158 176
159 void StartupPagesHandler::UpdateStartupPages() { 177 void StartupPagesHandler::UpdateStartupPages() {
160 const SessionStartupPref startup_pref = SessionStartupPref::GetStartupPref( 178 const SessionStartupPref startup_pref = SessionStartupPref::GetStartupPref(
161 Profile::FromWebUI(web_ui())->GetPrefs()); 179 Profile::FromWebUI(web_ui())->GetPrefs());
162 startup_custom_pages_table_model_.SetURLs(startup_pref.urls); 180 startup_custom_pages_table_model_.SetURLs(startup_pref.urls);
163 // The change will go to the JS code in the 181 // The change will go to the JS code in the
164 // StartupPagesHandler::OnModelChanged() method. 182 // StartupPagesHandler::OnModelChanged() method.
165 } 183 }
166 184
167 } // namespace settings 185 } // namespace settings
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698