Index: chrome/browser/ui/webui/history_ui.cc |
diff --git a/chrome/browser/ui/webui/history_ui.cc b/chrome/browser/ui/webui/history_ui.cc |
index 251580733ff1536ae8a73dc0d4f2046fe445cdca..37bb17c385a705932cec2a604459e44276a29651 100644 |
--- a/chrome/browser/ui/webui/history_ui.cc |
+++ b/chrome/browser/ui/webui/history_ui.cc |
@@ -144,7 +144,7 @@ content::WebUIDataSource* CreateHistoryUIHTMLSource() { |
source->AddLocalizedString("displayfiltersites", IDS_GROUP_BY_DOMAIN_LABEL); |
source->AddLocalizedString("rangeweek", IDS_HISTORY_RANGE_WEEK); |
source->AddLocalizedString("rangemonth", IDS_HISTORY_RANGE_MONTH); |
- source->AddLocalizedString("displayfiltersites", IDS_GROUP_BY_DOMAIN_LABEL); |
+ source->AddLocalizedString("rangetoday", IDS_HISTORY_RANGE_TODAY); |
source->AddLocalizedString("numbervisits", IDS_HISTORY_NUMBER_VISITS); |
source->AddBoolean("groupByDomain", |
CommandLine::ForCurrentProcess()->HasSwitch( |
@@ -262,6 +262,7 @@ void BrowsingHistoryHandler::HandleQueryHistory(const ListValue* args) { |
// Parse the arguments from JavaScript. There are six required arguments: |
// - the text to search for (may be empty) |
+ // - the offset from which the search should start in multiple of the range. |
// - the range (number) of days to search for, used only for grouped |
// searches. |
// - the end time of the range to search (see QueryOptions.end_time) |
@@ -271,43 +272,48 @@ void BrowsingHistoryHandler::HandleQueryHistory(const ListValue* args) { |
// - the maximum number of results to return (may be 0, meaning that there |
// is no maximum). |
string16 search_text = ExtractStringValue(args); |
- int range; |
- if (!args->GetInteger(1, &range)) { |
+ int offset; |
+ if (!args->GetInteger(1, &offset)) { |
NOTREACHED() << "Failed to convert argument 1. "; |
return; |
} |
+ int range; |
+ if (!args->GetInteger(2, &range)) { |
+ NOTREACHED() << "Failed to convert argument 2. "; |
+ return; |
+ } |
+ |
+ double end_time; |
+ if (!args->GetDouble(3, &end_time)) { |
+ NOTREACHED() << "Failed to convert argument 3. "; |
+ return; |
+ } |
+ if (end_time) |
+ options.end_time = base::Time::FromJsTime(end_time); |
switch (range) { |
case BrowsingHistoryHandler::MONTH: |
- SetQueryTimeInMonths(&options); |
+ SetQueryTimeInMonths(offset, &options); |
break; |
case BrowsingHistoryHandler::WEEK: |
- SetQueryTimeInWeeks(&options); |
+ SetQueryTimeInWeeks(offset, &options); |
break; |
case BrowsingHistoryHandler::NOT_GROUPED: |
break; |
} |
- double end_time; |
- if (!args->GetDouble(2, &end_time)) { |
- NOTREACHED() << "Failed to convert argument 2. "; |
- return; |
- } |
- if (end_time) |
- options.end_time = base::Time::FromJsTime(end_time); |
- |
const Value* cursor_value; |
// Get the cursor. It must be either null, or a list. |
- if (!args->Get(3, &cursor_value) || |
+ if (!args->Get(4, &cursor_value) || |
(!cursor_value->IsType(Value::TYPE_NULL) && |
!history::QueryCursor::FromValue(cursor_value, &options.cursor))) { |
- NOTREACHED() << "Failed to convert argument 3. "; |
+ NOTREACHED() << "Failed to convert argument 4. "; |
return; |
} |
- if (!ExtractIntegerValueAtIndex(args, 4, &options.max_count)) { |
- NOTREACHED() << "Failed to convert argument 4."; |
+ if (!ExtractIntegerValueAtIndex(args, 5, &options.max_count)) { |
+ NOTREACHED() << "Failed to convert argument 5."; |
return; |
} |
@@ -530,28 +536,54 @@ void BrowsingHistoryHandler::RemoveComplete() { |
} |
void BrowsingHistoryHandler::SetQueryTimeInWeeks( |
- history::QueryOptions* options) { |
+ int offset, history::QueryOptions* options) { |
// LocalMidnight returns the beginning of the current day so get the |
// beginning of the next one. |
base::Time midnight_today = base::Time::Now().LocalMidnight() + |
base::TimeDelta::FromDays(1); |
- options->end_time = midnight_today; |
- options->begin_time = midnight_today - base::TimeDelta::FromDays(7); |
+ options->end_time = midnight_today - |
+ base::TimeDelta::FromDays(7 * offset); |
+ options->begin_time = midnight_today - |
+ base::TimeDelta::FromDays(7 * (offset + 1)); |
} |
void BrowsingHistoryHandler::SetQueryTimeInMonths( |
- history::QueryOptions* options) { |
+ int offset, history::QueryOptions* options) { |
// Configure the begin point of the search to the start of the |
// current month. |
base::Time::Exploded exploded; |
base::Time::Now().LocalMidnight().LocalExplode(&exploded); |
exploded.day_of_month = 1; |
- options->begin_time = base::Time::FromLocalExploded(exploded); |
- // Set the end time of this first search to null (which will |
- // show results from the future, should the user's clock have |
- // been set incorrectly). |
- options->end_time = base::Time(); |
+ if (offset == 0) { |
+ options->begin_time = base::Time::FromLocalExploded(exploded); |
+ |
+ // Set the end time of this first search to null (which will |
+ // show results from the future, should the user's clock have |
+ // been set incorrectly). |
+ options->end_time = base::Time(); |
James Hawkins
2013/01/28 17:48:15
This block of code (all the green) is somewhat hai
Sergiu
2013/01/30 16:09:39
I've refactored this making it simple, hopefully i
|
+ } else { |
+ // Set the end-time of this search to the end of the month that is |
+ // |offset| months before the search end point. The end time is not |
+ // inclusive, so we should set it to midnight on the first day of the |
+ // following month. |
+ exploded.month -= offset - 1; |
+ while (exploded.month < 1) { |
+ exploded.month += 12; |
+ exploded.year--; |
+ } |
+ options->end_time = base::Time::FromLocalExploded(exploded); |
+ |
+ // Set the begin-time of the search to the start of the month |
+ // that is |offset| months prior to search_start_. |
+ if (exploded.month > 1) { |
+ exploded.month--; |
+ } else { |
+ exploded.month = 12; |
+ exploded.year--; |
+ } |
+ options->begin_time = base::Time::FromLocalExploded(exploded); |
+ } |
} |
// Helper function for Observe that determines if there are any differences |