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

Unified Diff: chrome_frame/html_utils.cc

Issue 5708007: Have Chrome Frame "support" IE conditional comment tags (of the downlevel-hid... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years 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
« no previous file with comments | « chrome_frame/html_utils.h ('k') | chrome_frame/test/html_util_unittests.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome_frame/html_utils.cc
===================================================================
--- chrome_frame/html_utils.cc (revision 68996)
+++ chrome_frame/html_utils.cc (working copy)
@@ -223,6 +223,16 @@
return false;
}
+bool HTMLScanner::IsIEConditionalCommentClose(StringRange* html_string,
amit 2010/12/13 22:19:56 nit: const StringRange*?
robertshield 2010/12/13 22:29:28 Done.
+ StrPos pos) {
amit 2010/12/13 22:19:56 nit: indent
robertshield 2010/12/13 22:29:28 Done.
+ if (pos < html_string->end_ && pos > html_string->start_ + 2 &&
+ *pos == L'>') {
+ return *(pos-1) == L']';
amit 2010/12/13 22:19:56 In the following expression: <!--[if IE 8]>, is wh
robertshield 2010/12/13 22:29:28 Not according to the spec http://msdn.microsoft.co
+ }
+ return false;
+}
+
+
bool HTMLScanner::NextTag(StringRange* html_string, StringRange* tag) {
DCHECK(NULL != html_string);
DCHECK(NULL != tag);
@@ -245,12 +255,31 @@
std::wstring tag_name;
StringRange start_range(tag->start_, html_string->end_);
start_range.GetTagName(&tag_name);
- if (StartsWith(tag_name, L"!--", true)) {
- // We're inside a comment tag, keep going until we get out of it.
+ if (StartsWith(tag_name, L"!--[if", true)) {
amit 2010/12/13 22:19:56 Is white space allowed between '!--' and '['?
robertshield 2010/12/13 22:29:28 Again, not according to the spec.
+ // This looks like the beginning of an IE conditional comment, scan until
+ // we hit the end which always looks like ']>'. For now we disregard the
+ // contents of the condition, and always assume true.
+ // TODO(robertshield): Optionally support the grammar defined by
+ // http://msdn.microsoft.com/en-us/library/ms537512(VS.85).aspx#syntax.
while (tag->end_ < html_string->end_ &&
+ !IsIEConditionalCommentClose(html_string, tag->end_)) {
+ tag->end_++;
+ }
+ } else if (StartsWith(tag_name, L"!--", true)) {
+ // We're inside a comment tag which ends in '-->'. Keep going until we
+ // reach the end.
+ while (tag->end_ < html_string->end_ &&
!IsHTMLCommentClose(html_string, tag->end_)) {
tag->end_++;
}
+ } else if (StartsWith(tag_name, L"![endif", true)) {
+ // We're inside the closing tag of an IE conditional comment which ends in
+ // either '-->' of ']>'. Keep going until we reach the end.
+ while (tag->end_ < html_string->end_ &&
+ !IsIEConditionalCommentClose(html_string, tag->end_) &&
+ !IsHTMLCommentClose(html_string, tag->end_)) {
+ tag->end_++;
+ }
} else {
// Properly handle quoted strings within non-comment tags by maintaining
// some state while scanning. Specifically, we have to maintain state on
« no previous file with comments | « chrome_frame/html_utils.h ('k') | chrome_frame/test/html_util_unittests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698