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

Unified Diff: chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc

Issue 10852002: Revert 149852 - Migrate WebRequestRedirectByRegExAction to use RE2 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc
===================================================================
--- chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc (revision 149852)
+++ chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc (working copy)
@@ -10,6 +10,7 @@
#include "base/logging.h"
#include "base/stringprintf.h"
#include "base/string_util.h"
+#include "base/utf_string_conversions.h"
#include "base/values.h"
#include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h"
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h"
@@ -18,7 +19,6 @@
#include "chrome/browser/extensions/extension_info_map.h"
#include "chrome/common/extensions/extension.h"
#include "net/url_request/url_request.h"
-#include "third_party/re2/re2/re2.h"
namespace extensions {
@@ -108,18 +108,20 @@
INPUT_FORMAT_VALIDATE(dict->GetString(keys::kFromKey, &from));
INPUT_FORMAT_VALIDATE(dict->GetString(keys::kToKey, &to));
- to = WebRequestRedirectByRegExAction::PerlToRe2Style(to);
+ // TODO(battre): Add this line once we migrate from ICU RegEx to RE2 RegEx.s
+ // to = WebRequestRedirectByRegExAction::PerlToRe2Style(to);
- RE2::Options options;
- options.set_case_sensitive(false);
- scoped_ptr<RE2> from_pattern(new RE2(from, options));
-
- if (!from_pattern->ok()) {
+ UParseError parse_error;
+ UErrorCode status = U_ZERO_ERROR;
+ scoped_ptr<icu::RegexPattern> pattern(
+ icu::RegexPattern::compile(icu::UnicodeString(from.data(), from.size()),
+ 0, parse_error, status));
+ if (U_FAILURE(status) || !pattern.get()) {
*error = "Invalid pattern '" + from + "' -> '" + to + "'";
return scoped_ptr<WebRequestAction>(NULL);
}
return scoped_ptr<WebRequestAction>(
- new WebRequestRedirectByRegExAction(from_pattern.Pass(), to));
+ new WebRequestRedirectByRegExAction(pattern.Pass(), to));
}
scoped_ptr<WebRequestAction> CreateSetRequestHeaderAction(
@@ -588,7 +590,7 @@
//
WebRequestRedirectByRegExAction::WebRequestRedirectByRegExAction(
- scoped_ptr<RE2> from_pattern,
+ scoped_ptr<icu::RegexPattern> from_pattern,
const std::string& to_pattern)
: from_pattern_(from_pattern.Pass()),
to_pattern_(to_pattern.data(), to_pattern.size()) {}
@@ -665,17 +667,29 @@
CHECK(request_stage & GetStages());
CHECK(from_pattern_.get());
+ UErrorCode status = U_ZERO_ERROR;
const std::string& old_url = request->url().spec();
- std::string new_url = old_url;
- if (!RE2::Replace(&new_url, *from_pattern_, to_pattern_) ||
- new_url == old_url) {
+ icu::UnicodeString old_url_unicode(old_url.data(), old_url.size());
+
+ scoped_ptr<icu::RegexMatcher> matcher(
+ from_pattern_->matcher(old_url_unicode, status));
+ if (U_FAILURE(status) || !matcher.get())
return LinkedPtrEventResponseDelta(NULL);
- }
+ icu::UnicodeString new_url = matcher->replaceAll(to_pattern_, status);
+ if (U_FAILURE(status))
+ return LinkedPtrEventResponseDelta(NULL);
+
+ std::string new_url_utf8;
+ UTF16ToUTF8(new_url.getBuffer(), new_url.length(), &new_url_utf8);
+
+ if (new_url_utf8 == request->url().spec())
+ return LinkedPtrEventResponseDelta(NULL);
+
LinkedPtrEventResponseDelta result(
new extension_web_request_api_helpers::EventResponseDelta(
extension_id, extension_install_time));
- result->new_url = GURL(new_url);
+ result->new_url = GURL(new_url_utf8);
return result;
}
« no previous file with comments | « chrome/browser/extensions/api/declarative_webrequest/webrequest_action.h ('k') | chrome/chrome_browser_extensions.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698