OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |