# Copyright (c) 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
import parse_deps
import re
srcdir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../src"))
def GritCheck():
filenames = [os.path.join(srcdir, x) for x in [
"base.js",
"about_tracing/profiling_view.js"]]
grit_files = []
load_sequence = parse_deps.calc_load_sequence(filenames, srcdir)
for module in load_sequence:
for style_sheet in module.style_sheets:
# I'm assuming we only have url()'s associated with images
grit_files.extend(re.findall(
'url\((?:["|\']?)([^"\'()]*)(?:["|\']?)\)',
style_sheet.contents))
for idx, filename in enumerate(grit_files):
while filename.startswith("../"):
filename = filename[3:]
grit_files[idx] = "src/" + filename
known_images = []
for (dirpath, dirnames, filenames) in os.walk('src/images'):
for name in filenames:
known_images.append(os.path.join(dirpath, name))
u = set(grit_files).union(set(known_images))
i = set(grit_files).intersection(set(known_images))
diff = list(u - i)
if len(diff) == 0:
return ''
error = 'Entries in CSS url()s do not match files in src/images:\n'
in_grit_only = list(set(grit_files) - set(known_images))
in_known_only = list(set(known_images) - set(grit_files))
if len(in_grit_only) > 0:
error += ' In CSS urls()s only:\n ' + '\n '.join(sorted(in_grit_only))
if len(in_known_only) > 0:
if len(in_grit_only) > 0:
error += '\n\n'
error += ' In src/images only:\n ' + '\n '.join(sorted(in_known_only))
return error