diff options
author | Torne (Richard Coles) <torne@google.com> | 2013-12-18 16:25:09 +0000 |
---|---|---|
committer | Torne (Richard Coles) <torne@google.com> | 2013-12-18 16:25:09 +0000 |
commit | a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7 (patch) | |
tree | dafc1c6417406a7fbd422ad0bb890e96909ef564 /ui | |
parent | d5f893c0bc79db3066bb5ae5d3d972ba1be7dd5f (diff) | |
download | chromium_org-a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7.tar.gz |
Merge from Chromium at DEPS revision 240154
This commit was generated by merge_to_master.py.
Change-Id: I8f2ba858cf0e7f413dddedc2ae91dc37f7136c2e
Diffstat (limited to 'ui')
647 files changed, 14057 insertions, 4185 deletions
diff --git a/ui/accessibility/OWNERS b/ui/accessibility/OWNERS new file mode 100644 index 0000000000..2c197f64f6 --- /dev/null +++ b/ui/accessibility/OWNERS @@ -0,0 +1,3 @@ +dmazzoni@chromium.org +dtseng@chromium.org +aboxhall@chromium.org diff --git a/ui/accessibility/accessibility.gyp b/ui/accessibility/accessibility.gyp index 673657b2f9..1402d3b975 100644 --- a/ui/accessibility/accessibility.gyp +++ b/ui/accessibility/accessibility.gyp @@ -41,12 +41,12 @@ 'type': 'executable', 'dependencies': [ '../../base/base.gyp:base', - '../../base/base.gyp:test_support_base', + '../../base/base.gyp:run_all_unittests', '../../testing/gtest.gyp:gtest', - '../../testing/gtest.gyp:gtest_main', 'accessibility', ], 'sources': [ + 'ax_tree_serializer_unittest.cc', 'ax_tree_unittest.cc', ] }, diff --git a/ui/accessibility/ax_serializable_tree.cc b/ui/accessibility/ax_serializable_tree.cc index 12bc595991..ca52ab39a2 100644 --- a/ui/accessibility/ax_serializable_tree.cc +++ b/ui/accessibility/ax_serializable_tree.cc @@ -20,6 +20,10 @@ class AX_EXPORT AXTreeSourceAdapter : public AXTreeSource<AXNode> { virtual ~AXTreeSourceAdapter() {} // AXTreeSource implementation. + virtual AXNode* GetRoot() const OVERRIDE { + return tree_->GetRoot(); + } + virtual AXNode* GetFromId(int32 id) const OVERRIDE { return tree_->GetFromId(id); } @@ -37,11 +41,8 @@ class AX_EXPORT AXTreeSourceAdapter : public AXTreeSource<AXNode> { return node->ChildAtIndex(index); } - virtual int32 GetParentId(const AXNode* node) const OVERRIDE { - if (node->parent()) - return node->parent()->id(); - else - return 0; + virtual AXNode* GetParent(const AXNode* node) const OVERRIDE { + return node->parent(); } virtual void SerializeNode( diff --git a/ui/accessibility/ax_tree.cc b/ui/accessibility/ax_tree.cc index b7d6f8ad30..5edb649ae8 100644 --- a/ui/accessibility/ax_tree.cc +++ b/ui/accessibility/ax_tree.cc @@ -6,6 +6,8 @@ #include <set> +#include "base/logging.h" +#include "base/strings/stringprintf.h" #include "ui/accessibility/ax_node.h" namespace ui { @@ -18,12 +20,12 @@ AXTree::AXTree() AXTreeUpdate initial_state; initial_state.nodes.push_back(root); - Unserialize(initial_state); + CHECK(Unserialize(initial_state)) << error(); } AXTree::AXTree(const AXTreeUpdate& initial_state) : root_(NULL) { - Unserialize(initial_state); + CHECK(Unserialize(initial_state)) << error(); } AXTree::~AXTree() { @@ -41,11 +43,41 @@ AXNode* AXTree::GetFromId(int32 id) const { } bool AXTree::Unserialize(const AXTreeUpdate& update) { + std::set<AXNode*> pending_nodes; + + if (update.node_id_to_clear != 0) { + AXNode* node = GetFromId(update.node_id_to_clear); + if (!node) { + error_ = base::StringPrintf("Bad node_id_to_clear: %d", + update.node_id_to_clear); + return false; + } + if (node == root_) { + DestroyNodeAndSubtree(root_); + root_ = NULL; + } else { + for (int i = 0; i < node->child_count(); ++i) + DestroyNodeAndSubtree(node->ChildAtIndex(i)); + std::vector<AXNode*> children; + node->SwapChildren(children); + pending_nodes.insert(node); + } + } + for (size_t i = 0; i < update.nodes.size(); ++i) { - if (!UpdateNode(update.nodes[i])) + if (!UpdateNode(update.nodes[i], &pending_nodes)) return false; } + if (!pending_nodes.empty()) { + error_ = "Nodes left pending by the update:"; + for (std::set<AXNode*>::iterator iter = pending_nodes.begin(); + iter != pending_nodes.end(); ++iter) { + error_ += base::StringPrintf(" %d", (*iter)->id()); + } + return false; + } + return true; } @@ -53,7 +85,8 @@ AXNode* AXTree::CreateNode(AXNode* parent, int32 id, int32 index_in_parent) { return new AXNode(parent, id, index_in_parent); } -bool AXTree::UpdateNode(const AXNodeData& src) { +bool AXTree::UpdateNode( + const AXNodeData& src, std::set<AXNode*>* pending_nodes) { // This method updates one node in the tree based on serialized data // received in an AXTreeUpdate. See AXTreeUpdate for pre and post // conditions. @@ -61,10 +94,15 @@ bool AXTree::UpdateNode(const AXNodeData& src) { // Look up the node by id. If it's not found, then either the root // of the tree is being swapped, or we're out of sync with the source // and this is a serious error. - AXNode* node = static_cast<AXNode*>(GetFromId(src.id)); - if (!node) { - if (src.role != AX_ROLE_ROOT_WEB_AREA) + AXNode* node = GetFromId(src.id); + if (node) { + pending_nodes->erase(node); + } else { + if (src.role != AX_ROLE_ROOT_WEB_AREA) { + error_ = base::StringPrintf( + "%d is not in the tree and not the new root", src.id); return false; + } node = CreateAndInitializeNode(NULL, src.id, 0); } @@ -79,7 +117,8 @@ bool AXTree::UpdateNode(const AXNodeData& src) { // Now build a new children vector, reusing nodes when possible, // and swap it in. std::vector<AXNode*> new_children; - bool success = CreateNewChildVector(node, src.child_ids, &new_children); + bool success = CreateNewChildVector( + node, src.child_ids, &new_children, pending_nodes); node->SwapChildren(new_children); // Update the root of the tree if needed. @@ -106,21 +145,22 @@ AXNode* AXTree::CreateAndInitializeNode( void AXTree::DestroyNodeAndSubtree(AXNode* node) { id_map_.erase(node->id()); - for (int i = 0; i < node->child_count(); ++i) { - AXNode* child = static_cast<AXNode*>(node->ChildAtIndex(i)); - child->Destroy(); - } + for (int i = 0; i < node->child_count(); ++i) + DestroyNodeAndSubtree(node->ChildAtIndex(i)); node->Destroy(); } bool AXTree::DeleteOldChildren(AXNode* node, - const std::vector<int32> new_child_ids) { + const std::vector<int32> new_child_ids) { // Create a set of child ids in |src| for fast lookup, and return false // if a duplicate is found; std::set<int32> new_child_id_set; for (size_t i = 0; i < new_child_ids.size(); ++i) { - if (new_child_id_set.find(new_child_ids[i]) != new_child_id_set.end()) + if (new_child_id_set.find(new_child_ids[i]) != new_child_id_set.end()) { + error_ = base::StringPrintf("Node %d has duplicate child id %d", + node->id(), new_child_ids[i]); return false; + } new_child_id_set.insert(new_child_ids[i]); } @@ -136,24 +176,31 @@ bool AXTree::DeleteOldChildren(AXNode* node, } bool AXTree::CreateNewChildVector(AXNode* node, - const std::vector<int32> new_child_ids, - std::vector<AXNode*>* new_children) { + const std::vector<int32> new_child_ids, + std::vector<AXNode*>* new_children, + std::set<AXNode*>* pending_nodes) { bool success = true; for (size_t i = 0; i < new_child_ids.size(); ++i) { int32 child_id = new_child_ids[i]; int32 index_in_parent = static_cast<int32>(i); - AXNode* child = static_cast<AXNode*>(GetFromId(child_id)); + AXNode* child = GetFromId(child_id); if (child) { if (child->parent() != node) { // This is a serious error - nodes should never be reparented. // If this case occurs, continue so this node isn't left in an // inconsistent state, but return failure at the end. + error_ = base::StringPrintf( + "Node %d reparented from %d to %d", + child->id(), + child->parent() ? child->parent()->id() : 0, + node->id()); success = false; continue; } child->SetIndexInParent(index_in_parent); } else { child = CreateAndInitializeNode(node, child_id, index_in_parent); + pending_nodes->insert(child); } new_children->push_back(child); } diff --git a/ui/accessibility/ax_tree.h b/ui/accessibility/ax_tree.h index 84108e0591..773a773adf 100644 --- a/ui/accessibility/ax_tree.h +++ b/ui/accessibility/ax_tree.h @@ -5,8 +5,9 @@ #ifndef UI_ACCESSIBILITY_AX_TREE_H_ #define UI_ACCESSIBILITY_AX_TREE_H_ -#include "base/containers/hash_tables.h" +#include <set> +#include "base/containers/hash_tables.h" #include "ui/accessibility/ax_export.h" #include "ui/accessibility/ax_tree.h" #include "ui/accessibility/ax_tree_update.h" @@ -29,15 +30,26 @@ class AX_EXPORT AXTree { virtual AXNode* GetRoot() const; virtual AXNode* GetFromId(int32 id) const; + // Returns true on success. If it returns false, it's a fatal error + // and this tree should be destroyed, and the source of the tree update + // should not be trusted any longer. virtual bool Unserialize(const AXTreeUpdate& update); + // A string describing the error from an unsuccessful Unserialize, + // for testing and debugging. + const std::string& error() { return error_; } + protected: // Subclasses can override this to use a subclass of AXNode. virtual AXNode* CreateNode(AXNode* parent, int32 id, int32 index_in_parent); // This is called from within Unserialize(), it returns true on success. - // Subclasses can override this to do additional processing. - virtual bool UpdateNode(const AXNodeData& src); + // Subclasses can override this to do additional processing. |pending_nodes| + // is updated to contain all nodes that have been implicitly referenced + // as part of this update, but haven't been updated yet. It's an error if + // there are any pending nodes at the end of Unserialize. + virtual bool UpdateNode(const AXNodeData& src, + std::set<AXNode*>* pending_nodes); // Subclasses can override this to do special behavior when the root changes. virtual void OnRootChanged(); @@ -61,13 +73,16 @@ class AX_EXPORT AXTree { // pointers to child nodes, reusing existing nodes already in the tree // if they exist, and creating otherwise. Reparenting is disallowed, so // if the id already exists as the child of another node, that's an - // error. Returns true on success, false on fatal error. + // error. Returns true on success, false on fatal error. See + // UpdateNode, above, for an explanation of |pending_nodes|. bool CreateNewChildVector(AXNode* node, const std::vector<int32> new_child_ids, - std::vector<AXNode*>* new_children); + std::vector<AXNode*>* new_children, + std::set<AXNode*>* pending_nodes); AXNode* root_; base::hash_map<int32, AXNode*> id_map_; + std::string error_; }; } // namespace ui diff --git a/ui/accessibility/ax_tree_serializer.h b/ui/accessibility/ax_tree_serializer.h index cbc01c043a..e6049964c7 100644 --- a/ui/accessibility/ax_tree_serializer.h +++ b/ui/accessibility/ax_tree_serializer.h @@ -9,6 +9,7 @@ #include "base/containers/hash_tables.h" #include "base/logging.h" +#include "base/stl_util.h" #include "ui/accessibility/ax_tree_source.h" #include "ui/accessibility/ax_tree_update.h" @@ -17,23 +18,44 @@ namespace ui { struct ClientTreeNode; // AXTreeSerializer is a helper class that serializes incremental -// updates to an AXTreeSource as a vector of AXNodeData structs. -// These structs can be unserialized by an AXTree. An AXTreeSerializer -// keeps track of the tree of node ids that its client is aware of, so -// it will automatically include, as part of any update, any additional nodes -// that the client is not aware of yet. +// updates to an AXTreeSource as a AXTreeUpdate struct. +// These structs can be unserialized by a client object such as an +// AXTree. An AXTreeSerializer keeps track of the tree of node ids that its +// client is aware of so that it will never generate an AXTreeUpdate that +// results in an invalid tree. // -// When the AXTreeSource changes, call SerializeChanges to serialize the -// changes to the tree as an AXTreeUpdate. If a single node has changed, -// pass that node to SerializeChanges. If a node has been added or removed, -// pass the parent of that node to SerializeChanges and it will automatically -// handle changes to its set of children. +// Every node in the source tree must have an id that's a unique positive +// integer, the same node must not appear twice. // -// TODO(dmazzoni): add sample usage code. +// Usage: +// +// You must call SerializeChanges() every time a node in the tree changes, +// and send the generated AXTreeUpdate to the client. +// +// If a node is added, call SerializeChanges on its parent. +// If a node is removed, call SerializeChanges on its parent. +// If a whole new subtree is added, just call SerializeChanges on its root. +// If the root of the tree changes, call SerializeChanges on the new root. +// +// AXTreeSerializer will avoid re-serializing nodes that do not change. +// For example, if node 1 has children 2, 3, 4, 5 and then child 2 is +// removed and a new child 6 is added, the AXTreeSerializer will only +// update nodes 1 and 6 (and any children of node 6 recursively). It will +// assume that nodes 3, 4, and 5 are not modified unless you explicitly +// call SerializeChanges() on them. +// +// As long as the source tree has unique ids for every node and no loops, +// and as long as every update is applied to the client tree, AXTreeSerializer +// will continue to work. If the source tree makes a change but fails to +// call SerializeChanges properly, the trees may get out of sync - but +// because AXTreeSerializer always keeps track of what updates it's sent, +// it will never send an invalid update and the client tree will not break, +// it just may not contain all of the changes. template<class AXSourceNode> class AXTreeSerializer { public: explicit AXTreeSerializer(AXTreeSource<AXSourceNode>* tree); + ~AXTreeSerializer(); // Throw out the internal state that keeps track of the nodes the client // knows about. This has the effect that the next update will send the @@ -44,13 +66,71 @@ class AXTreeSerializer { void SerializeChanges(const AXSourceNode* node, AXTreeUpdate* out_update); + // Only for unit testing. Normally this class relies on getting a call + // to SerializeChanges() every time the source tree changes. For unit + // testing, it's convenient to create a static AXTree for the initial + // state and then call ChangeTreeSourceForTesting and then SerializeChanges + // to simulate the changes you'd get if a tree changed from the initial + // state to the second tree's state. + void ChangeTreeSourceForTesting(AXTreeSource<AXSourceNode>* new_tree); + private: + // Return the least common ancestor of a node in the source tree + // and a node in the client tree, or NULL if there is no such node. + // The least common ancestor is the closest ancestor to |node| (which + // may be |node| itself) that's in both the source tree and client tree, + // and for which both the source and client tree agree on their ancestor + // chain up to the root. + // + // Example 1: + // + // Client Tree Source tree | + // 1 1 | + // / \ / \ | + // 2 3 2 4 | + // + // LCA(source node 2, client node 2) is node 2. + // LCA(source node 3, client node 4) is node 1. + // + // Example 2: + // + // Client Tree Source tree | + // 1 1 | + // / \ / \ | + // 2 3 2 3 | + // / \ / / | + // 4 7 8 4 | + // / \ / \ | + // 5 6 5 6 | + // + // LCA(source node 8, client node 7) is node 2. + // LCA(source node 5, client node 5) is node 1. + // It's not node 5, because the two trees disagree on the parent of + // node 4, so the LCA is the first ancestor both trees agree on. + const AXSourceNode* LeastCommonAncestor(const AXSourceNode* node, + ClientTreeNode* client_node); + + // Return the least common ancestor of |node| that's in the client tree. + // This just walks up the ancestors of |node| until it finds a node that's + // also in the client tree, and then calls LeastCommonAncestor on the + // source node and client node. + const AXSourceNode* LeastCommonAncestor(const AXSourceNode* node); + + // Walk the subtree rooted at |node| and return true if any nodes that + // would be updated are being reparented. If so, update |lca| to point + // to the least common ancestor of the previous LCA and the previous + // parent of the node being reparented. + bool AnyDescendantWasReparented(const AXSourceNode* node, + const AXSourceNode** lca); + + ClientTreeNode* ClientTreeNodeById(int32 id); + // Delete the given client tree node and recursively delete all of its // descendants. void DeleteClientSubtree(ClientTreeNode* client_node); + // Helper function, called recursively with each new node to serialize. void SerializeChangedNodes(const AXSourceNode* node, - std::set<int>* ids_serialized, AXTreeUpdate* out_update); // The tree source. @@ -82,6 +162,11 @@ AXTreeSerializer<AXSourceNode>::AXTreeSerializer( } template<class AXSourceNode> +AXTreeSerializer<AXSourceNode>::~AXTreeSerializer() { + Reset(); +} + +template<class AXSourceNode> void AXTreeSerializer<AXSourceNode>::Reset() { if (client_root_) { DeleteClientSubtree(client_root_); @@ -90,11 +175,153 @@ void AXTreeSerializer<AXSourceNode>::Reset() { } template<class AXSourceNode> +void AXTreeSerializer<AXSourceNode>::ChangeTreeSourceForTesting( + AXTreeSource<AXSourceNode>* new_tree) { + tree_ = new_tree; +} + +template<class AXSourceNode> +const AXSourceNode* AXTreeSerializer<AXSourceNode>::LeastCommonAncestor( + const AXSourceNode* node, ClientTreeNode* client_node) { + if (node == NULL || client_node == NULL) + return NULL; + + std::vector<const AXSourceNode*> ancestors; + while (node) { + ancestors.push_back(node); + node = tree_->GetParent(node); + } + + std::vector<ClientTreeNode*> client_ancestors; + while (client_node) { + client_ancestors.push_back(client_node); + client_node = client_node->parent; + } + + // Start at the root. Keep going until the source ancestor chain and + // client ancestor chain disagree. The last node before they disagree + // is the LCA. + const AXSourceNode* lca = NULL; + int source_index = static_cast<int>(ancestors.size() - 1); + int client_index = static_cast<int>(client_ancestors.size() - 1); + while (source_index >= 0 && client_index >= 0) { + if (tree_->GetId(ancestors[source_index]) != + client_ancestors[client_index]->id) { + return lca; + } + lca = ancestors[source_index]; + source_index--; + client_index--; + } + return lca; +} + +template<class AXSourceNode> +const AXSourceNode* AXTreeSerializer<AXSourceNode>::LeastCommonAncestor( + const AXSourceNode* node) { + // Walk up the tree until the source node's id also exists in the + // client tree, then call LeastCommonAncestor on those two nodes. + ClientTreeNode* client_node = ClientTreeNodeById(tree_->GetId(node)); + while (node && !client_node) { + node = tree_->GetParent(node); + if (node) + client_node = ClientTreeNodeById(tree_->GetId(node)); + } + return LeastCommonAncestor(node, client_node); +} + +template<class AXSourceNode> +bool AXTreeSerializer<AXSourceNode>::AnyDescendantWasReparented( + const AXSourceNode* node, const AXSourceNode** lca) { + bool result = false; + int id = tree_->GetId(node); + int child_count = tree_->GetChildCount(node); + for (int i = 0; i < child_count; ++i) { + const AXSourceNode* child = tree_->GetChildAtIndex(node, i); + int child_id = tree_->GetId(child); + ClientTreeNode* client_child = ClientTreeNodeById(child_id); + if (client_child) { + if (!client_child->parent) { + // If the client child has no parent, it must have been the + // previous root node, so there is no LCA and we can exit early. + *lca = NULL; + return true; + } else if (client_child->parent->id != id) { + // If the client child's parent is not this node, update the LCA + // and return true (reparenting was found). + *lca = LeastCommonAncestor(*lca, client_child); + result = true; + } else { + // This child is already in the client tree, we won't + // recursively serialize it so we don't need to check this + // subtree recursively for reparenting. + continue; + } + } + + // This is a new child or reparented child, check it recursively. + if (AnyDescendantWasReparented(child, lca)) + result = true; + } + return result; +} + +template<class AXSourceNode> +ClientTreeNode* AXTreeSerializer<AXSourceNode>::ClientTreeNodeById(int32 id) { + base::hash_map<int32, ClientTreeNode*>::iterator iter = + client_id_map_.find(id); + if (iter != client_id_map_.end()) + return iter->second; + else + return NULL; +} + +template<class AXSourceNode> void AXTreeSerializer<AXSourceNode>::SerializeChanges( const AXSourceNode* node, AXTreeUpdate* out_update) { - std::set<int> ids_serialized; - SerializeChangedNodes(node, &ids_serialized, out_update); + // If the node isn't in the client tree, we need to serialize starting + // with the LCA. + const AXSourceNode* lca = LeastCommonAncestor(node); + + if (client_root_) { + // If the LCA is anything other than the node itself, tell the + // client to first delete the subtree rooted at the LCA. + bool need_delete = (lca != node); + if (lca) { + // Check for any reparenting within this subtree - if there is + // any, we need to delete and reserialize the whole subtree + // that contains the old and new parents of the reparented node. + if (AnyDescendantWasReparented(lca, &lca)) + need_delete = true; + } + + if (lca == NULL) { + // If there's no LCA, just tell the client to destroy the whole + // tree and then we'll serialize everything from the new root. + out_update->node_id_to_clear = client_root_->id; + DeleteClientSubtree(client_root_); + client_id_map_.erase(client_root_->id); + client_root_ = NULL; + } else if (need_delete) { + // Otherwise, if we need to reserialize a subtree, first we need + // to delete those nodes in our client tree so that + // SerializeChangedNodes() will be sure to send them again. + out_update->node_id_to_clear = tree_->GetId(lca); + ClientTreeNode* client_lca = ClientTreeNodeById(tree_->GetId(lca)); + CHECK(client_lca); + for (size_t i = 0; i < client_lca->children.size(); ++i) { + client_id_map_.erase(client_lca->children[i]->id); + DeleteClientSubtree(client_lca->children[i]); + } + client_lca->children.clear(); + } + } + + // Serialize from the LCA, or from the root if there isn't one. + if (!lca) + lca = tree_->GetRoot(); + SerializeChangedNodes(lca, out_update); } template<class AXSourceNode> @@ -110,13 +337,7 @@ void AXTreeSerializer<AXSourceNode>::DeleteClientSubtree( template<class AXSourceNode> void AXTreeSerializer<AXSourceNode>::SerializeChangedNodes( const AXSourceNode* node, - std::set<int>* ids_serialized, AXTreeUpdate* out_update) { - int id = tree_->GetId(node); - if (ids_serialized->find(id) != ids_serialized->end()) - return; - ids_serialized->insert(id); - // This method has three responsibilities: // 1. Serialize |node| into an AXNodeData, and append it to // the AXTreeUpdate to be sent to the client. @@ -129,14 +350,9 @@ void AXTreeSerializer<AXSourceNode>::SerializeChangedNodes( // we keep track of what accessibility objects the client already knows // about. If we don't find it, then this must be the new root of the // accessibility tree. - // - // TODO(dmazzoni): handle the case where the root changes. - ClientTreeNode* client_node = NULL; - base::hash_map<int32, ClientTreeNode*>::iterator iter = - client_id_map_.find(id); - if (iter != client_id_map_.end()) { - client_node = iter->second; - } else { + int id = tree_->GetId(node); + ClientTreeNode* client_node = ClientTreeNodeById(id); + if (!client_node) { if (client_root_) { client_id_map_.erase(client_root_->id); DeleteClientSubtree(client_root_); @@ -151,9 +367,6 @@ void AXTreeSerializer<AXSourceNode>::SerializeChangedNodes( // Iterate over the ids of the children of |node|. // Create a set of the child ids so we can quickly look // up which children are new and which ones were there before. - // Also catch the case where a child is already in the client tree - // data structure with a different parent, and make sure the old parent - // clears this node first. base::hash_set<int32> new_child_ids; int child_count = tree_->GetChildCount(node); for (int i = 0; i < child_count; ++i) { @@ -161,27 +374,10 @@ void AXTreeSerializer<AXSourceNode>::SerializeChangedNodes( int new_child_id = tree_->GetId(child); new_child_ids.insert(new_child_id); + // This is a sanity check - there shouldn't be any reparenting + // because we've already handled it above. ClientTreeNode* client_child = client_id_map_[new_child_id]; - if (client_child && client_child->parent != client_node) { - // The child is being reparented. Find the source tree node - // corresponding to the old parent, or the closest ancestor - // still in the tree. - ClientTreeNode* client_parent = client_child->parent; - AXSourceNode* parent = NULL; - while (client_parent) { - parent = tree_->GetFromId(client_parent->id); - if (parent) - break; - client_parent = client_parent->parent; - } - CHECK(parent); - - // Call SerializeChangedNodes recursively on the old parent, - // so that the update that clears |child| from its old parent - // occurs stricly before the update that adds |child| to its - // new parent. - SerializeChangedNodes(parent, ids_serialized, out_update); - } + CHECK(!client_child || client_child->parent == client_node); } // Go through the old children and delete subtrees for child @@ -244,7 +440,7 @@ void AXTreeSerializer<AXSourceNode>::SerializeChangedNodes( // Serialize all of the new children, recursively. for (size_t i = 0; i < children_to_serialize.size(); ++i) - SerializeChangedNodes(children_to_serialize[i], ids_serialized, out_update); + SerializeChangedNodes(children_to_serialize[i], out_update); } } // namespace ui diff --git a/ui/accessibility/ax_tree_serializer_unittest.cc b/ui/accessibility/ax_tree_serializer_unittest.cc new file mode 100644 index 0000000000..3ec8de71f4 --- /dev/null +++ b/ui/accessibility/ax_tree_serializer_unittest.cc @@ -0,0 +1,182 @@ +// Copyright 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. + +#include "base/memory/scoped_ptr.h" +#include "base/strings/string_number_conversions.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/accessibility/ax_node.h" +#include "ui/accessibility/ax_serializable_tree.h" +#include "ui/accessibility/ax_tree.h" +#include "ui/accessibility/ax_tree_serializer.h" + +namespace ui { + +// The framework for these tests is that each test sets up |treedata0_| +// and |treedata1_| and then calls GetTreeSerializer, which creates a +// serializer for a tree that's initially in state |treedata0_|, but then +// changes to state |treedata1_|. This allows each test to check the +// updates created by AXTreeSerializer or unit-test its private +// member functions. +class AXTreeSerializerTest : public testing::Test { + public: + AXTreeSerializerTest() {} + virtual ~AXTreeSerializerTest() {} + + protected: + void CreateTreeSerializer(); + + AXTreeUpdate treedata0_; + AXTreeUpdate treedata1_; + scoped_ptr<AXSerializableTree> tree0_; + scoped_ptr<AXSerializableTree> tree1_; + scoped_ptr<AXTreeSource<AXNode> > tree0_source_; + scoped_ptr<AXTreeSource<AXNode> > tree1_source_; + scoped_ptr<AXTreeSerializer<AXNode> > serializer_; + + private: + DISALLOW_COPY_AND_ASSIGN(AXTreeSerializerTest); +}; + +void AXTreeSerializerTest::CreateTreeSerializer() { + if (serializer_) + return; + + tree0_.reset(new AXSerializableTree(treedata0_)); + tree1_.reset(new AXSerializableTree(treedata1_)); + + // Serialize tree0 so that AXTreeSerializer thinks that its client + // is totally in sync. + tree0_source_.reset(tree0_->CreateTreeSource()); + serializer_.reset(new AXTreeSerializer<AXNode>(tree0_source_.get())); + AXTreeUpdate unused_update; + serializer_->SerializeChanges(tree0_->GetRoot(), &unused_update); + + // Pretend that tree0_ turned into tree1_. The next call to + // AXTreeSerializer will force it to consider these changes to + // the tree and send them as part of the next update. + tree1_source_.reset(tree1_->CreateTreeSource()); + serializer_->ChangeTreeSourceForTesting(tree1_source_.get()); +} + +// In this test, one child is added to the root. Only the root and +// new child should be added. +TEST_F(AXTreeSerializerTest, UpdateContainsOnlyChangedNodes) { + // (1 (2 3)) + treedata0_.nodes.resize(3); + treedata0_.nodes[0].id = 1; + treedata0_.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; + treedata0_.nodes[0].child_ids.push_back(2); + treedata0_.nodes[0].child_ids.push_back(3); + treedata0_.nodes[1].id = 2; + treedata0_.nodes[2].id = 3; + + // (1 (4 2 3)) + treedata1_.nodes.resize(4); + treedata1_.nodes[0].id = 1; + treedata1_.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; + treedata1_.nodes[0].child_ids.push_back(4); + treedata1_.nodes[0].child_ids.push_back(2); + treedata1_.nodes[0].child_ids.push_back(3); + treedata1_.nodes[1].id = 2; + treedata1_.nodes[2].id = 3; + treedata1_.nodes[3].id = 4; + + CreateTreeSerializer(); + AXTreeUpdate update; + serializer_->SerializeChanges(tree1_->GetFromId(1), &update); + + // The update should only touch nodes 1 and 4 - nodes 2 and 3 are unchanged + // and shouldn't be affected. + EXPECT_EQ(0, update.node_id_to_clear); + ASSERT_EQ(static_cast<size_t>(2), update.nodes.size()); + EXPECT_EQ(1, update.nodes[0].id); + EXPECT_EQ(4, update.nodes[1].id); +} + +// When the root changes, the whole tree is updated, even if some of it +// is unaffected. +TEST_F(AXTreeSerializerTest, NewRootUpdatesEntireTree) { + // (1 (2 (3 (4)))) + treedata0_.nodes.resize(4); + treedata0_.nodes[0].id = 1; + treedata0_.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; + treedata0_.nodes[0].child_ids.push_back(2); + treedata0_.nodes[1].id = 2; + treedata0_.nodes[1].child_ids.push_back(3); + treedata0_.nodes[2].id = 3; + treedata0_.nodes[2].child_ids.push_back(4); + treedata0_.nodes[3].id = 4; + + // (5 (2 (3 (4)))) + treedata1_.nodes.resize(4); + treedata1_.nodes[0].id = 5; + treedata1_.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; + treedata1_.nodes[0].child_ids.push_back(2); + treedata1_.nodes[1].id = 2; + treedata1_.nodes[1].child_ids.push_back(3); + treedata1_.nodes[2].id = 3; + treedata1_.nodes[2].child_ids.push_back(4); + treedata1_.nodes[3].id = 4; + + CreateTreeSerializer(); + AXTreeUpdate update; + serializer_->SerializeChanges(tree1_->GetFromId(4), &update); + + // The update should delete the subtree rooted at node id=1, and + // then include all four nodes in the update, even though the + // subtree rooted at id=2 didn't actually change. + EXPECT_EQ(1, update.node_id_to_clear); + ASSERT_EQ(static_cast<size_t>(4), update.nodes.size()); + EXPECT_EQ(5, update.nodes[0].id); + EXPECT_EQ(2, update.nodes[1].id); + EXPECT_EQ(3, update.nodes[2].id); + EXPECT_EQ(4, update.nodes[3].id); +} + +// When a node is reparented, the subtree including both the old parent +// and new parent of the reparented node must be deleted and recreated. +TEST_F(AXTreeSerializerTest, ReparentingUpdatesSubtree) { + // (1 (2 (3 (4) 5))) + treedata0_.nodes.resize(5); + treedata0_.nodes[0].id = 1; + treedata0_.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; + treedata0_.nodes[0].child_ids.push_back(2); + treedata0_.nodes[1].id = 2; + treedata0_.nodes[1].child_ids.push_back(3); + treedata0_.nodes[1].child_ids.push_back(5); + treedata0_.nodes[2].id = 3; + treedata0_.nodes[2].child_ids.push_back(4); + treedata0_.nodes[3].id = 4; + treedata0_.nodes[4].id = 5; + + // Node 5 has been reparented from being a child of node 2, + // to a child of node 4. + // (1 (2 (3 (4 (5))))) + treedata1_.nodes.resize(5); + treedata1_.nodes[0].id = 1; + treedata1_.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; + treedata1_.nodes[0].child_ids.push_back(2); + treedata1_.nodes[1].id = 2; + treedata1_.nodes[1].child_ids.push_back(3); + treedata1_.nodes[2].id = 3; + treedata1_.nodes[2].child_ids.push_back(4); + treedata1_.nodes[3].id = 4; + treedata1_.nodes[3].child_ids.push_back(5); + treedata1_.nodes[4].id = 5; + + CreateTreeSerializer(); + AXTreeUpdate update; + serializer_->SerializeChanges(tree1_->GetFromId(4), &update); + + // The update should delete the subtree rooted at node id=2, and + // then include nodes 2...5. + EXPECT_EQ(2, update.node_id_to_clear); + ASSERT_EQ(static_cast<size_t>(4), update.nodes.size()); + EXPECT_EQ(2, update.nodes[0].id); + EXPECT_EQ(3, update.nodes[1].id); + EXPECT_EQ(4, update.nodes[2].id); + EXPECT_EQ(5, update.nodes[3].id); +} + +} // namespace ui diff --git a/ui/accessibility/ax_tree_source.h b/ui/accessibility/ax_tree_source.h index 383e70e3f0..35bdbb711c 100644 --- a/ui/accessibility/ax_tree_source.h +++ b/ui/accessibility/ax_tree_source.h @@ -21,14 +21,13 @@ template<class AXNodeSource> class AX_EXPORT AXTreeSource { public: virtual ~AXTreeSource() {} + virtual AXNodeSource* GetRoot() const = 0; virtual AXNodeSource* GetFromId(int32 id) const = 0; virtual int32 GetId(const AXNodeSource* node) const = 0; virtual int GetChildCount(const AXNodeSource* node) const = 0; virtual AXNodeSource* GetChildAtIndex(const AXNodeSource* node, int index) const = 0; - - // Returns the id of this node's parent, or 0 if it doesn't have a parent. - virtual int32 GetParentId(const AXNodeSource* node) const = 0; + virtual AXNodeSource* GetParent(const AXNodeSource* node) const = 0; // Serialize one node in the tree. virtual void SerializeNode( diff --git a/ui/accessibility/ax_tree_unittest.cc b/ui/accessibility/ax_tree_unittest.cc index 3f11899c85..9e21280a06 100644 --- a/ui/accessibility/ax_tree_unittest.cc +++ b/ui/accessibility/ax_tree_unittest.cc @@ -3,6 +3,7 @@ // found in the LICENSE file. #include "base/memory/scoped_ptr.h" +#include "base/strings/string_number_conversions.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/accessibility/ax_node.h" #include "ui/accessibility/ax_serializable_tree.h" @@ -11,7 +12,7 @@ namespace ui { -TEST(AXTreeTest, TestSerialize) { +TEST(AXTreeTest, SerializeSimpleAXTree) { AXNodeData root; root.id = 1; root.role = AX_ROLE_ROOT_WEB_AREA; @@ -58,4 +59,108 @@ TEST(AXTreeTest, TestSerialize) { EXPECT_EQ(checkbox.role, checkbox_node->data().role); } +TEST(AXTreeTest, DeleteUnknownSubtreeFails) { + AXNodeData root; + root.id = 1; + root.role = AX_ROLE_ROOT_WEB_AREA; + + AXTreeUpdate initial_state; + initial_state.nodes.push_back(root); + AXTree tree(initial_state); + + // This should fail because we're asking it to delete + // a subtree rooted at id=2, which doesn't exist. + AXTreeUpdate update; + update.node_id_to_clear = 2; + update.nodes.resize(1); + update.nodes[0].id = 1; + update.nodes[0].id = AX_ROLE_ROOT_WEB_AREA; + EXPECT_FALSE(tree.Unserialize(update)); + ASSERT_EQ("Bad node_id_to_clear: 2", tree.error()); +} + +TEST(AXTreeTest, LeaveOrphanedDeletedSubtreeFails) { + AXTreeUpdate initial_state; + initial_state.nodes.resize(3); + initial_state.nodes[0].id = 1; + initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; + initial_state.nodes[0].child_ids.push_back(2); + initial_state.nodes[0].child_ids.push_back(3); + initial_state.nodes[1].id = 2; + initial_state.nodes[2].id = 3; + AXTree tree(initial_state); + + // This should fail because we delete a subtree rooted at id=2 + // but never update it. + AXTreeUpdate update; + update.node_id_to_clear = 2; + update.nodes.resize(1); + update.nodes[0].id = 3; + EXPECT_FALSE(tree.Unserialize(update)); + ASSERT_EQ("Nodes left pending by the update: 2", tree.error()); +} + +TEST(AXTreeTest, LeaveOrphanedNewChildFails) { + AXTreeUpdate initial_state; + initial_state.nodes.resize(1); + initial_state.nodes[0].id = 1; + initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; + AXTree tree(initial_state); + + // This should fail because we add a new child to the root node + // but never update it. + AXTreeUpdate update; + update.nodes.resize(1); + update.nodes[0].id = 1; + update.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; + update.nodes[0].child_ids.push_back(2); + EXPECT_FALSE(tree.Unserialize(update)); + ASSERT_EQ("Nodes left pending by the update: 2", tree.error()); +} + +TEST(AXTreeTest, DuplicateChildIdFails) { + AXTreeUpdate initial_state; + initial_state.nodes.resize(1); + initial_state.nodes[0].id = 1; + initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; + AXTree tree(initial_state); + + // This should fail because a child id appears twice. + AXTreeUpdate update; + update.nodes.resize(2); + update.nodes[0].id = 1; + update.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; + update.nodes[0].child_ids.push_back(2); + update.nodes[0].child_ids.push_back(2); + update.nodes[1].id = 2; + EXPECT_FALSE(tree.Unserialize(update)); + ASSERT_EQ("Node 1 has duplicate child id 2", tree.error()); +} + +TEST(AXTreeTest, InvalidReparentingFails) { + AXTreeUpdate initial_state; + initial_state.nodes.resize(3); + initial_state.nodes[0].id = 1; + initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; + initial_state.nodes[0].child_ids.push_back(2); + initial_state.nodes[1].id = 2; + initial_state.nodes[1].child_ids.push_back(3); + initial_state.nodes[2].id = 3; + + AXTree tree(initial_state); + + // This should fail because node 3 is reparented from node 2 to node 1 + // without deleting node 1's subtree first. + AXTreeUpdate update; + update.nodes.resize(3); + update.nodes[0].id = 1; + update.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; + update.nodes[0].child_ids.push_back(3); + update.nodes[0].child_ids.push_back(2); + update.nodes[1].id = 2; + update.nodes[2].id = 3; + EXPECT_FALSE(tree.Unserialize(update)); + ASSERT_EQ("Node 3 reparented from 2 to 1", tree.error()); +} + } // namespace ui diff --git a/ui/accessibility/ax_tree_update.cc b/ui/accessibility/ax_tree_update.cc index 083c577a6b..dc785d9e06 100644 --- a/ui/accessibility/ax_tree_update.cc +++ b/ui/accessibility/ax_tree_update.cc @@ -6,7 +6,7 @@ namespace ui { -AXTreeUpdate::AXTreeUpdate() { +AXTreeUpdate::AXTreeUpdate() : node_id_to_clear(0) { } AXTreeUpdate::~AXTreeUpdate() { diff --git a/ui/accessibility/ax_tree_update.h b/ui/accessibility/ax_tree_update.h index 0599821afc..0280efe644 100644 --- a/ui/accessibility/ax_tree_update.h +++ b/ui/accessibility/ax_tree_update.h @@ -15,13 +15,18 @@ namespace ui { // to an AXTree. The sender and receiver must be in sync; the update // is only meant to bring the tree from a specific previous state into // its next state. Trying to apply it to the wrong tree should immediately -// die with a fatal assertion. An AXTreeUpdate is just an ordered vector -// of AXNodeData structures to be applied to the tree in order. +// die with a fatal assertion. +// +// An AXTreeUpdate consists of an optional node id to clear (meaning +// that all of that node's children and their descendants are deleted), +// followed by an ordered vector of AXNodeData structures to be applied +// to the tree in order. // // Suppose that the next AXNodeData to be applied is |node|. The following // invariants must hold: -// 1. Either |node.id| is already in the tree, or else |node| is the new -// root of the tree and |node.role| == WebAXRoleRootWebArea. +// 1. Either |node.id| is already in the tree, or else the tree is empty, +// |node| is the new root of the tree, and +// |node.role| == WebAXRoleRootWebArea. // 2. Every child id in |node.child_ids| must either be already a child // of this node, or a new id not previously in the tree. It is not // allowed to "reparent" a child to this node without first removing @@ -35,6 +40,14 @@ struct AX_EXPORT AXTreeUpdate { AXTreeUpdate(); ~AXTreeUpdate(); + // The id of a node to clear, before applying any updates, + // or 0 if no nodes should be cleared. Clearing a node means deleting + // all of its children and their descendants, but leaving that node in + // the tree. It's an error to clear a node but not subsequently update it + // as part of the tree update. + int node_id_to_clear; + + // A vector of nodes to update, according to the rules above. std::vector<AXNodeData> nodes; // TODO(dmazzoni): location changes diff --git a/ui/android/java/res/drawable-ldpi/autofill_popup_background_down.9.png b/ui/android/java/res/drawable-ldpi/autofill_popup_background_down.9.png Binary files differdeleted file mode 100644 index 0fb3b87b8f..0000000000 --- a/ui/android/java/res/drawable-ldpi/autofill_popup_background_down.9.png +++ /dev/null diff --git a/ui/android/java/res/drawable-ldpi/autofill_popup_background_up.9.png b/ui/android/java/res/drawable-ldpi/autofill_popup_background_up.9.png Binary files differdeleted file mode 100644 index 4ab1786471..0000000000 --- a/ui/android/java/res/drawable-ldpi/autofill_popup_background_up.9.png +++ /dev/null diff --git a/ui/android/java/res/drawable/autofill_popup_background_down.9.png b/ui/android/java/res/drawable/autofill_popup_background_down.9.png Binary files differindex 2022fd7438..0fb3b87b8f 100644 --- a/ui/android/java/res/drawable/autofill_popup_background_down.9.png +++ b/ui/android/java/res/drawable/autofill_popup_background_down.9.png diff --git a/ui/android/java/res/drawable/autofill_popup_background_up.9.png b/ui/android/java/res/drawable/autofill_popup_background_up.9.png Binary files differindex 62fc5a6bf9..4ab1786471 100644 --- a/ui/android/java/res/drawable/autofill_popup_background_up.9.png +++ b/ui/android/java/res/drawable/autofill_popup_background_up.9.png diff --git a/ui/android/java/res/drawable/color_button_background.xml b/ui/android/java/res/drawable/color_button_background.xml new file mode 100644 index 0000000000..66bcce2e4d --- /dev/null +++ b/ui/android/java/res/drawable/color_button_background.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 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. +--> + +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item + android:top="0dp" + android:right="0dp" + android:bottom="0dp" + android:left="0dp"> + <shape android:shape="rectangle"> + <solid android:color="@color/color_picker_border_color"/> + </shape> + </item> + <item android:top="0px" + android:right="1px" + android:bottom="0px" + android:left="1px"> + <shape android:shape="rectangle"> + <solid android:color="@color/color_picker_background_color"/> + </shape> + </item> + <item + android:id="@+id/color_button_swatch" + android:top="1px" + android:right="2px" + android:bottom="1px" + android:left="2px"> + <shape android:shape="rectangle"> + <solid android:color="#FF0000"/> + </shape> + </item> +</layer-list> diff --git a/ui/android/java/res/drawable/color_picker_border.xml b/ui/android/java/res/drawable/color_picker_border.xml index b48be9bb41..6cd6bbfbd6 100644 --- a/ui/android/java/res/drawable/color_picker_border.xml +++ b/ui/android/java/res/drawable/color_picker_border.xml @@ -3,8 +3,10 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> + <shape xmlns:android="http://schemas.android.com/apk/res/android" - android:shape="rectangle"> - <solid android:color="#00000000"/> - <stroke android:width="1px" android:color="@color/color_picker_border_color" /> + android:shape="rectangle"> + + <stroke android:width="1px" android:color="@color/color_picker_border_color" /> + <solid android:color="@color/color_picker_background_color"/> </shape>
\ No newline at end of file diff --git a/ui/android/java/res/layout/color_picker_dialog_content.xml b/ui/android/java/res/layout/color_picker_dialog_content.xml index 8aa4dbaeff..38a492d0b2 100644 --- a/ui/android/java/res/layout/color_picker_dialog_content.xml +++ b/ui/android/java/res/layout/color_picker_dialog_content.xml @@ -4,53 +4,48 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> -<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="wrap_content" + android:orientation="vertical" + android:padding="15dp"> - <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + <ScrollView android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical" - android:padding="15dp"> + android:layout_height="wrap_content"> <org.chromium.ui.ColorPickerAdvanced android:id="@+id/color_picker_advanced" android:layout_width="match_parent" android:layout_height="wrap_content" /> + </ScrollView> - <FrameLayout - android:id="@+id/color_picker_simple_border" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="@drawable/color_picker_border" - android:paddingStart="1px" - android:paddingEnd="1px" - android:paddingTop="1px"> + <org.chromium.ui.ColorPickerSimple + android:id="@+id/color_picker_simple" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:divider="@color/color_picker_border_color" + android:dividerHeight="1px" + android:paddingStart="1px" + android:paddingEnd="1px" + android:paddingTop="1px" + android:background="@drawable/color_picker_border" /> - <org.chromium.ui.ColorPickerSimple - android:id="@+id/color_picker_simple" - android:layout_width="match_parent" - android:layout_height="100dp"/> - </FrameLayout> + <FrameLayout + android:id="@+id/more_colors_button_border" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@drawable/color_picker_border" + android:padding="1px"> - <FrameLayout - android:id="@+id/more_colors_button_border" + <org.chromium.ui.ColorPickerMoreButton + android:id="@+id/more_colors_button" + style="?android:attr/buttonBarButtonStyle" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_below="@+id/color_picker_simple_border" - android:background="@drawable/color_picker_border" - android:padding="1px"> - - <org.chromium.ui.ColorPickerMoreButton - android:id="@+id/more_colors_button" - style="?android:attr/buttonBarButtonStyle" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:minHeight="48dp" - android:textAppearance="?android:attr/textAppearanceSmall" - android:text="@string/color_picker_button_more" /> - </FrameLayout> - - </RelativeLayout> -</ScrollView>
\ No newline at end of file + android:minHeight="48dp" + android:textAppearance="?android:attr/textAppearanceSmall" + android:text="@string/color_picker_button_more" /> + </FrameLayout> +</LinearLayout> diff --git a/ui/android/java/res/layout/date_time_suggestion.xml b/ui/android/java/res/layout/date_time_suggestion.xml new file mode 100644 index 0000000000..e47ac7682c --- /dev/null +++ b/ui/android/java/res/layout/date_time_suggestion.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 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. +--> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/date_time_suggestion" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:minHeight="44dp" + android:orientation="horizontal" + android:gravity="center_vertical"> + <TextView + android:id="@+id/date_time_suggestion_value" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="10dp" + android:layout_marginEnd="10dp" + android:ellipsize="end" + android:singleLine="true" + android:textSize="18sp" /> + <TextView + android:id="@+id/date_time_suggestion_label" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginEnd="10dp" + android:layout_weight="1" + android:textSize="18sp" + android:gravity="end" + android:textColor="#8b8b8b" + android:ellipsize="end" + android:singleLine="true" /> +</LinearLayout> diff --git a/ui/android/java/res/values/colors.xml b/ui/android/java/res/values/colors.xml index a602826945..9aa152bae5 100644 --- a/ui/android/java/res/values/colors.xml +++ b/ui/android/java/res/values/colors.xml @@ -6,6 +6,7 @@ --> <resources> <color name="color_picker_border_color">#B0B0B0</color> + <color name="color_picker_background_color">#FFFFFF</color> <color name="autofill_divider_color">#E5E5E5</color> <color name="autofill_dark_divider_color">#C0C0C0</color> </resources> diff --git a/ui/android/java/res/values/dimens.xml b/ui/android/java/res/values/dimens.xml index 01bc555368..8bdacc7e34 100644 --- a/ui/android/java/res/values/dimens.xml +++ b/ui/android/java/res/values/dimens.xml @@ -11,6 +11,7 @@ of the seek bar icon. --> <dimen name="color_picker_gradient_margin">14.5dp</dimen> + <dimen name="color_button_height">60dp</dimen> <dimen name="autofill_text_height">44dp</dimen> <dimen name="autofill_text_divider_height">1px</dimen> diff --git a/ui/android/java/resource_map/OWNERS b/ui/android/java/resource_map/OWNERS index d85278d5ee..3e31f9baef 100644 --- a/ui/android/java/resource_map/OWNERS +++ b/ui/android/java/resource_map/OWNERS @@ -6,8 +6,9 @@ set noparent benm@chromium.org boliu@chomium.org -joth@chromium.org +michaelbai@chromium.org mkosiba@chromium.org mnaganov@chromium.org primiano@chromium.org +sgurun@chromium.org torne@chromium.org diff --git a/ui/android/java/resource_map/org/chromium/ui/R.java b/ui/android/java/resource_map/org/chromium/ui/R.java index 8f8e499631..094313092c 100644 --- a/ui/android/java/resource_map/org/chromium/ui/R.java +++ b/ui/android/java/resource_map/org/chromium/ui/R.java @@ -16,6 +16,7 @@ package org.chromium.ui; */ public final class R { public static final class string { + public static int copy_to_clipboard_failure_message; public static int low_memory_error; public static int opening_file_error; public static int color_picker_button_more; @@ -25,6 +26,14 @@ public final class R { public static int color_picker_button_set; public static int color_picker_button_cancel; public static int color_picker_dialog_title; + public static int color_picker_button_red; + public static int color_picker_button_cyan; + public static int color_picker_button_blue; + public static int color_picker_button_green; + public static int color_picker_button_magenta; + public static int color_picker_button_yellow; + public static int color_picker_button_black; + public static int color_picker_button_white; } public static final class id { public static int autofill_label; @@ -35,6 +44,7 @@ public final class R { public static int more_colors_button; public static int color_picker_advanced; public static int color_picker_simple; + public static int color_button_swatch; public static int more_colors_button_border; public static int color_picker_simple_border; public static int gradient; @@ -48,6 +58,7 @@ public final class R { public static int color_picker_advanced_component; } public static final class drawable { + public static int color_button_background; public static int color_picker_advanced_select_handle; } public static final class style { @@ -61,5 +72,6 @@ public final class R { public static final class dimen { public static int autofill_text_height; public static int autofill_text_divider_height; + public static int color_button_height; } } diff --git a/ui/android/java/src/org/chromium/ui/ColorPickerAdvanced.java b/ui/android/java/src/org/chromium/ui/ColorPickerAdvanced.java index 91800eaa8f..29b4e1fd46 100644 --- a/ui/android/java/src/org/chromium/ui/ColorPickerAdvanced.java +++ b/ui/android/java/src/org/chromium/ui/ColorPickerAdvanced.java @@ -9,7 +9,6 @@ import android.graphics.Color; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; -import android.view.accessibility.AccessibilityEvent; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; @@ -70,7 +69,6 @@ public class ColorPickerAdvanced extends LinearLayout implements OnSeekBarChange SATURATION_SEEK_BAR_MAX, this); mValueDetails = createAndAddNewGradient(R.string.color_picker_value, VALUE_SEEK_BAR_MAX, this); - refreshGradientComponents(); } diff --git a/ui/android/java/src/org/chromium/ui/ColorPickerAdvancedComponent.java b/ui/android/java/src/org/chromium/ui/ColorPickerAdvancedComponent.java index 1e679d5fe8..c868f328a3 100644 --- a/ui/android/java/src/org/chromium/ui/ColorPickerAdvancedComponent.java +++ b/ui/android/java/src/org/chromium/ui/ColorPickerAdvancedComponent.java @@ -12,6 +12,7 @@ import android.view.View; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; + import org.chromium.base.ApiCompatibilityUtils; /** diff --git a/ui/android/java/src/org/chromium/ui/ColorPickerDialog.java b/ui/android/java/src/org/chromium/ui/ColorPickerDialog.java index 58f1e0a302..f6d3ace5cb 100644 --- a/ui/android/java/src/org/chromium/ui/ColorPickerDialog.java +++ b/ui/android/java/src/org/chromium/ui/ColorPickerDialog.java @@ -1,4 +1,4 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright 2012 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. @@ -35,11 +35,14 @@ public class ColorPickerDialog extends AlertDialog implements OnColorChangedList /** * @param context The context the dialog is to run in. - * @param theme The theme to display the dialog in. * @param listener The object to notify when the color is set. * @param color The initial color to set. + * @param suggestions The list of suggestions. */ - public ColorPickerDialog(Context context, OnColorChangedListener listener, int color) { + public ColorPickerDialog(Context context, + OnColorChangedListener listener, + int color, + ColorSuggestion[] suggestions) { super(context, 0); mListener = listener; @@ -110,7 +113,7 @@ public class ColorPickerDialog extends AlertDialog implements OnColorChangedList // Initialize simple color view (default view). mSimpleColorPicker = (ColorPickerSimple) content.findViewById(R.id.color_picker_simple); - mSimpleColorPicker.init(this); + mSimpleColorPicker.init(suggestions, this); updateCurrentColor(mInitialColor); } @@ -136,8 +139,8 @@ public class ColorPickerDialog extends AlertDialog implements OnColorChangedList View buttonBorder = findViewById(R.id.more_colors_button_border); buttonBorder.setVisibility(View.GONE); - View simpleViewBorder = findViewById(R.id.color_picker_simple_border); - simpleViewBorder.setVisibility(View.GONE); + View simpleView = findViewById(R.id.color_picker_simple); + simpleView.setVisibility(View.GONE); mAdvancedColorPicker.setVisibility(View.VISIBLE); mAdvancedColorPicker.setListener(this); @@ -148,9 +151,7 @@ public class ColorPickerDialog extends AlertDialog implements OnColorChangedList * Tries to notify any listeners that the color has been set. */ private void tryNotifyColorSet(int color) { - if (mListener != null) { - mListener.onColorChanged(color); - } + if (mListener != null) mListener.onColorChanged(color); } /** @@ -159,8 +160,6 @@ public class ColorPickerDialog extends AlertDialog implements OnColorChangedList */ private void updateCurrentColor(int color) { mCurrentColor = color; - if (mCurrentColorView != null) { - mCurrentColorView.setBackgroundColor(color); - } + if (mCurrentColorView != null) mCurrentColorView.setBackgroundColor(color); } } diff --git a/ui/android/java/src/org/chromium/ui/ColorPickerMoreButton.java b/ui/android/java/src/org/chromium/ui/ColorPickerMoreButton.java index a982afd9e5..849c4d8182 100644 --- a/ui/android/java/src/org/chromium/ui/ColorPickerMoreButton.java +++ b/ui/android/java/src/org/chromium/ui/ColorPickerMoreButton.java @@ -7,7 +7,6 @@ import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; -import android.graphics.Paint.Style; import android.util.AttributeSet; import android.widget.Button; diff --git a/ui/android/java/src/org/chromium/ui/ColorPickerSimple.java b/ui/android/java/src/org/chromium/ui/ColorPickerSimple.java index 979405a407..69b880ea33 100644 --- a/ui/android/java/src/org/chromium/ui/ColorPickerSimple.java +++ b/ui/android/java/src/org/chromium/ui/ColorPickerSimple.java @@ -1,50 +1,45 @@ // Copyright 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. + package org.chromium.ui; import android.content.Context; -import android.graphics.Canvas; import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.util.AttributeSet; -import android.view.MotionEvent; -import android.view.View; +import android.widget.ListView; +import org.chromium.ui.ColorSuggestionListAdapter.OnColorSuggestionClickListener; /** * Draws a grid of (predefined) colors and allows the user to choose one of * those colors. */ -public class ColorPickerSimple extends View { - private static final int ROW_COUNT = 2; - - private static final int COLUMN_COUNT = 4; - - private static final int GRID_CELL_COUNT = ROW_COUNT * COLUMN_COUNT; - - private static final int[] COLORS = { Color.RED, - Color.CYAN, - Color.BLUE, - Color.GREEN, - Color.MAGENTA, - Color.YELLOW, - Color.BLACK, - Color.WHITE - }; - - private Paint mBorderPaint; - - private Rect[] mBounds; - - private Paint[] mPaints; - - private OnColorChangedListener mOnColorTouchedListener; - - private int mLastTouchedXPosition; - - private int mLastTouchedYPosition; +public class ColorPickerSimple extends ListView implements OnColorSuggestionClickListener { + + private OnColorChangedListener mOnColorChangedListener; + + private static final int[] DEFAULT_COLORS = { + Color.RED, + Color.CYAN, + Color.BLUE, + Color.GREEN, + Color.MAGENTA, + Color.YELLOW, + Color.BLACK, + Color.WHITE + }; + + private static final int[] DEFAULT_COLOR_LABEL_IDS = { + R.string.color_picker_button_red, + R.string.color_picker_button_cyan, + R.string.color_picker_button_blue, + R.string.color_picker_button_green, + R.string.color_picker_button_magenta, + R.string.color_picker_button_yellow, + R.string.color_picker_button_black, + R.string.color_picker_button_white + }; public ColorPickerSimple(Context context) { super(context); @@ -59,131 +54,33 @@ public class ColorPickerSimple extends View { } /** - * Initializes the listener and precalculates the grid and color positions. + * Initializes the listener and sets the adapter for the given list of suggestions. If the + * suggestions is null a default set of colors will be used. * + * @param suggestions The list of suggestions that should be displayed. * @param onColorChangedListener The listener that gets notified when the user touches * a color. */ - public void init(OnColorChangedListener onColorChangedListener) { - mOnColorTouchedListener = onColorChangedListener; - - // This will get calculated when the layout size is updated. - mBounds = null; - - mPaints = new Paint[GRID_CELL_COUNT]; - for (int i = 0; i < GRID_CELL_COUNT; ++i) { - Paint newPaint = new Paint(); - newPaint.setColor(COLORS[i]); - mPaints[i] = newPaint; - } - - mBorderPaint = new Paint(); - int borderColor = getContext().getResources().getColor(R.color.color_picker_border_color); - mBorderPaint.setColor(borderColor); - - // Responds to the user touching the grid and works out which color has been chosen as - // a result, depending on the X,Y coordinate. Note that we respond to the click event - // here, but the onClick() method doesn't provide us with the X,Y coordinates, so we - // track them in onTouchEvent() below. This way the grid reacts properly to touch events - // whereas if we put this onClick() code in onTouchEvent below then we get some strange - // interactions with the ScrollView in the parent ColorPickerDialog. - setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - if (mOnColorTouchedListener != null && getWidth() > 0 && getHeight() > 0) { - int column = mLastTouchedXPosition * COLUMN_COUNT / getWidth(); - int row = mLastTouchedYPosition * ROW_COUNT / getHeight(); - - int colorIndex = (row * COLUMN_COUNT) + column; - if (colorIndex >= 0 && colorIndex < COLORS.length) { - mOnColorTouchedListener.onColorChanged(COLORS[colorIndex]); - } - } + public void init(ColorSuggestion[] suggestions, + OnColorChangedListener onColorChangedListener) { + mOnColorChangedListener = onColorChangedListener; + + if (suggestions == null) { + suggestions = new ColorSuggestion[DEFAULT_COLORS.length]; + for (int i = 0; i < suggestions.length; ++i) { + suggestions[i] = new ColorSuggestion(DEFAULT_COLORS[i], + getContext().getString(DEFAULT_COLOR_LABEL_IDS[i])); } - }); - } - - /** - * Draws the grid of colors, based on the rectangles calculated in onSizeChanged(). - * Also draws borders in between the colored rectangles. - * - * @param canvas The canvas the colors are drawn onto. - */ - @Override - public void onDraw(Canvas canvas) { - if (mBounds == null || mPaints == null) { - return; - } - - canvas.drawColor(Color.WHITE); - - // Draw the actual colored rectangles. - for (int i = 0; i < GRID_CELL_COUNT; ++i) { - canvas.drawRect(mBounds[i], mPaints[i]); - } - - // Draw 1px borders between the rows. - for (int i = 0; i < ROW_COUNT - 1; ++i) { - canvas.drawLine(0, - mBounds[i * COLUMN_COUNT].bottom + 1, - getWidth(), - mBounds[i * COLUMN_COUNT].bottom + 1, - mBorderPaint); } - // Draw 1px borders between the columns. - for (int j = 0; j < COLUMN_COUNT - 1; ++j) { - canvas.drawLine(mBounds[j].right + 1, - 0, - mBounds[j].right + 1, - getHeight(), - mBorderPaint); - } + ColorSuggestionListAdapter adapter = new ColorSuggestionListAdapter( + getContext(), suggestions); + adapter.setOnColorSuggestionClickListener(this); + setAdapter(adapter); } - /** - * Stores the X,Y coordinates of the touch so that we can use them in the onClick() listener - * above to work out where the click was on the grid. - * - * @param event The MotionEvent the X,Y coordinates are retrieved from. - */ @Override - public boolean onTouchEvent(MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_DOWN) { - mLastTouchedXPosition = (int) event.getX(); - mLastTouchedYPosition = (int) event.getY(); - } - return super.onTouchEvent(event); - } - - /** - * Recalculates the color grid with the new sizes. - */ - @Override - protected void onSizeChanged(int width, int height, int oldw, int oldh) { - calculateGrid(width, height); - } - - /** - * Calculates the sizes and positions of the cells in the grid, splitting - * them up as evenly as possible. Leaves 3 pixels between each cell so that - * we can draw a border between them as well, and leaves a pixel around the - * edge. - */ - private void calculateGrid(final int width, final int height) { - mBounds = new Rect[GRID_CELL_COUNT]; - - for (int i = 0; i < ROW_COUNT; ++i) { - for (int j = 0; j < COLUMN_COUNT; ++j) { - int left = j * (width + 1) / COLUMN_COUNT + 1; - int right = (j + 1) * (width + 1) / COLUMN_COUNT - 2; - - int top = i * (height + 1) / ROW_COUNT + 1; - int bottom = (i + 1) * (height + 1) / ROW_COUNT - 2; - - Rect rect = new Rect(left, top, right, bottom); - mBounds[(i * COLUMN_COUNT) + j] = rect; - } - } + public void onColorSuggestionClick(ColorSuggestion suggestion) { + mOnColorChangedListener.onColorChanged(suggestion.mColor); } } diff --git a/ui/android/java/src/org/chromium/ui/ColorSuggestion.java b/ui/android/java/src/org/chromium/ui/ColorSuggestion.java new file mode 100644 index 0000000000..4e964a767d --- /dev/null +++ b/ui/android/java/src/org/chromium/ui/ColorSuggestion.java @@ -0,0 +1,24 @@ +// Copyright 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. + +package org.chromium.ui; + +/** + * Color suggestion container used to store information for each color button that will be shown in + * the simple color picker. + */ +public class ColorSuggestion { + final int mColor; + final String mLabel; + + /** + * Constructs a color suggestion container. + * @param color The suggested color. + * @param label The label for the suggestion. + */ + public ColorSuggestion(int color, String label) { + mColor = color; + mLabel = label; + } +} diff --git a/ui/android/java/src/org/chromium/ui/ColorSuggestionListAdapter.java b/ui/android/java/src/org/chromium/ui/ColorSuggestionListAdapter.java new file mode 100644 index 0000000000..b237acbb12 --- /dev/null +++ b/ui/android/java/src/org/chromium/ui/ColorSuggestionListAdapter.java @@ -0,0 +1,142 @@ +// Copyright 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. + +package org.chromium.ui; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.GradientDrawable; +import android.graphics.drawable.LayerDrawable; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AbsListView; +import android.widget.BaseAdapter; +import android.widget.LinearLayout; + +import org.chromium.base.ApiCompatibilityUtils; + +/** + * The adapter used to populate ColorPickerSimple. + */ +public class ColorSuggestionListAdapter extends BaseAdapter implements View.OnClickListener { + private Context mContext; + private ColorSuggestion[] mSuggestions; + private OnColorSuggestionClickListener mListener; + + /** + * The callback used to indicate the user has clicked on a suggestion. + */ + public interface OnColorSuggestionClickListener { + + /** + * Called upon a click on a suggestion. + * + * @param suggestion The suggestion that was clicked. + */ + void onColorSuggestionClick(ColorSuggestion suggestion); + } + + private static final int COLORS_PER_ROW = 4; + + ColorSuggestionListAdapter(Context context, ColorSuggestion[] suggestions) { + mContext = context; + mSuggestions = suggestions; + } + + /** + * Sets the listener that will be notified upon a click on a suggestion. + */ + public void setOnColorSuggestionClickListener(OnColorSuggestionClickListener listener) { + mListener = listener; + } + + /** + * Sets up the color button to represent a color suggestion. + * + * @param button The button view to set up. + * @param index The index of the suggestion in mSuggestions. + */ + private void setUpColorButton(View button, int index) { + if (index >= mSuggestions.length) { + button.setTag(null); + button.setContentDescription(null); + button.setVisibility(View.INVISIBLE); + return; + } + button.setTag(mSuggestions[index]); + button.setVisibility(View.VISIBLE); + ColorSuggestion suggestion = mSuggestions[index]; + LayerDrawable layers = (LayerDrawable) button.getBackground(); + GradientDrawable swatch = + (GradientDrawable) layers.findDrawableByLayerId(R.id.color_button_swatch); + swatch.setColor(suggestion.mColor); + String description = suggestion.mLabel; + if (TextUtils.isEmpty(description)) { + description = String.format("#%06X", (0xFFFFFF & suggestion.mColor)); + } + button.setContentDescription(description); + button.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + if (mListener == null) { + return; + } + ColorSuggestion suggestion = (ColorSuggestion) v.getTag(); + if (suggestion == null) { + return; + } + mListener.onColorSuggestionClick(suggestion); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + LinearLayout layout; + if (convertView != null && convertView instanceof LinearLayout) { + layout = (LinearLayout) convertView; + } else { + layout = new LinearLayout(mContext); + layout.setLayoutParams(new AbsListView.LayoutParams( + AbsListView.LayoutParams.MATCH_PARENT, + AbsListView.LayoutParams.WRAP_CONTENT)); + layout.setOrientation(LinearLayout.HORIZONTAL); + layout.setBackgroundColor(Color.WHITE); + int buttonHeight = + mContext.getResources().getDimensionPixelOffset(R.dimen.color_button_height); + for (int i = 0; i < COLORS_PER_ROW; ++i) { + View button = new View(mContext); + LinearLayout.LayoutParams layoutParams = + new LinearLayout.LayoutParams(0, buttonHeight, 1f); + ApiCompatibilityUtils.setMarginStart(layoutParams, -1); + if (i == COLORS_PER_ROW - 1) { + ApiCompatibilityUtils.setMarginEnd(layoutParams, -1); + } + button.setLayoutParams(layoutParams); + button.setBackgroundResource(R.drawable.color_button_background); + layout.addView(button); + } + } + for (int i = 0; i < COLORS_PER_ROW; ++i) { + setUpColorButton(layout.getChildAt(i), position * COLORS_PER_ROW + i); + } + return layout; + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public Object getItem(int position) { + return null; + } + + @Override + public int getCount() { + return (mSuggestions.length + COLORS_PER_ROW - 1) / COLORS_PER_ROW; + } +} diff --git a/ui/android/java/src/org/chromium/ui/OnColorChangedListener.java b/ui/android/java/src/org/chromium/ui/OnColorChangedListener.java index 4caa3cf05b..c4847fa7f8 100644 --- a/ui/android/java/src/org/chromium/ui/OnColorChangedListener.java +++ b/ui/android/java/src/org/chromium/ui/OnColorChangedListener.java @@ -1,6 +1,7 @@ // Copyright 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. + package org.chromium.ui; /** diff --git a/ui/android/java/src/org/chromium/ui/UiUtils.java b/ui/android/java/src/org/chromium/ui/UiUtils.java index c11d9e3741..c9c7c0c80d 100644 --- a/ui/android/java/src/org/chromium/ui/UiUtils.java +++ b/ui/android/java/src/org/chromium/ui/UiUtils.java @@ -1,4 +1,4 @@ -// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Copyright 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. @@ -28,7 +28,7 @@ public class UiUtils { } /** The minimum size of the bottom margin below the app to detect a keyboard. */ - private static float KEYBOARD_DETECT_BOTTOM_THRESHOLD_DP = 100; + private static final float KEYBOARD_DETECT_BOTTOM_THRESHOLD_DP = 100; /** * Shows the software keyboard if necessary. diff --git a/ui/android/java/src/org/chromium/ui/autofill/AutofillDividerDrawable.java b/ui/android/java/src/org/chromium/ui/autofill/AutofillDividerDrawable.java index 5bf1240781..9aa88e8af8 100644 --- a/ui/android/java/src/org/chromium/ui/autofill/AutofillDividerDrawable.java +++ b/ui/android/java/src/org/chromium/ui/autofill/AutofillDividerDrawable.java @@ -7,12 +7,11 @@ package org.chromium.ui.autofill; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.Paint; +import android.graphics.PixelFormat; import android.graphics.Rect; -import android.graphics.RectF; import android.graphics.drawable.Drawable; -import android.graphics.PixelFormat; -public class AutofillDividerDrawable extends Drawable { +class AutofillDividerDrawable extends Drawable { private Paint mPaint; private Rect mDividerRect; diff --git a/ui/android/java/src/org/chromium/ui/autofill/AutofillListAdapter.java b/ui/android/java/src/org/chromium/ui/autofill/AutofillListAdapter.java index f15b91b13d..94608af980 100644 --- a/ui/android/java/src/org/chromium/ui/autofill/AutofillListAdapter.java +++ b/ui/android/java/src/org/chromium/ui/autofill/AutofillListAdapter.java @@ -2,13 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - package org.chromium.ui.autofill; import android.content.Context; -import android.content.res.Resources; import android.graphics.Color; -import android.graphics.drawable.LayerDrawable; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; @@ -17,9 +14,8 @@ import android.widget.AbsListView.LayoutParams; import android.widget.ArrayAdapter; import android.widget.TextView; -import org.chromium.ui.R; - import org.chromium.base.ApiCompatibilityUtils; +import org.chromium.ui.R; import java.util.ArrayList; import java.util.Set; diff --git a/ui/android/java/src/org/chromium/ui/autofill/AutofillPopup.java b/ui/android/java/src/org/chromium/ui/autofill/AutofillPopup.java index f290c7e96d..af6951c3ee 100644 --- a/ui/android/java/src/org/chromium/ui/autofill/AutofillPopup.java +++ b/ui/android/java/src/org/chromium/ui/autofill/AutofillPopup.java @@ -15,14 +15,14 @@ import android.widget.AdapterView; import android.widget.ListPopupWindow; import android.widget.TextView; +import org.chromium.ui.R; +import org.chromium.ui.base.ViewAndroidDelegate; + import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; -import org.chromium.ui.R; -import org.chromium.ui.base.ViewAndroidDelegate; - /** * The Autofill suggestion popup that lists relevant suggestions. */ @@ -81,7 +81,7 @@ public class AutofillPopup extends ListPopupWindow implements AdapterView.OnItem AutofillPopupDelegate autofillCallback) { super(context, null, 0, R.style.AutofillPopupWindow); mContext = context; - mViewAndroidDelegate = viewAndroidDelegate ; + mViewAndroidDelegate = viewAndroidDelegate; mAutofillCallback = autofillCallback; setOnItemClickListener(this); diff --git a/ui/android/java/src/org/chromium/ui/base/Clipboard.java b/ui/android/java/src/org/chromium/ui/base/Clipboard.java index e62c84ab84..aaa500ea6d 100644 --- a/ui/android/java/src/org/chromium/ui/base/Clipboard.java +++ b/ui/android/java/src/org/chromium/ui/base/Clipboard.java @@ -1,17 +1,18 @@ -// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Copyright 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. package org.chromium.ui.base; -import org.chromium.base.CalledByNative; -import org.chromium.base.JNINamespace; - import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; -import android.os.Build; -import android.text.TextUtils; +import android.widget.Toast; + +import org.chromium.base.ApiCompatibilityUtils; +import org.chromium.base.CalledByNative; +import org.chromium.base.JNINamespace; +import org.chromium.ui.R; /** * Simple proxy that provides C++ code with an access pathway to the Android @@ -30,7 +31,7 @@ public class Clipboard { * * @param context for accessing the clipboard */ - private Clipboard(final Context context) { + public Clipboard(final Context context) { mContext = context; mClipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -77,6 +78,36 @@ public class Clipboard { } /** + * Gets the HTML text of top item on the primary clip on the Android clipboard. + * + * @return a Java string with the html text if any, or null if there is no html + * text or no entries on the primary clip. + */ + @CalledByNative + private String getHTMLText() { + if (isHTMLClipboardSupported()) { + final ClipData clip = mClipboardManager.getPrimaryClip(); + if (clip != null && clip.getItemCount() > 0) { + return clip.getItemAt(0).getHtmlText(); + } + } + return null; + } + + /** + * Emulates the behavior of the now-deprecated + * {@link android.text.ClipboardManager#setText(CharSequence)}, setting the + * clipboard's current primary clip to a plain-text clip that consists of + * the specified string. + * + * @param label will become the label of the clipboard's primary clip + * @param text will become the content of the clipboard's primary clip + */ + public void setText(final String label, final String text) { + setPrimaryClipNoException(ClipData.newPlainText(label, text)); + } + + /** * Emulates the behavior of the now-deprecated * {@link android.text.ClipboardManager#setText(CharSequence)}, setting the * clipboard's current primary clip to a plain-text clip that consists of @@ -84,10 +115,9 @@ public class Clipboard { * * @param text will become the content of the clipboard's primary clip */ - @SuppressWarnings("javadoc") @CalledByNative - private void setText(final String text) { - mClipboardManager.setPrimaryClip(ClipData.newPlainText(null, text)); + public void setText(final String text) { + setText(null, text); } /** @@ -95,34 +125,41 @@ public class Clipboard { * of that very data. This API is only available in Android JellyBean+ and * will be a no-operation in older versions. * - * @param html The HTML content to be pasted to the clipboard. - * @param text Plain-text representation of the HTML content. + * @param html The HTML content to be pasted to the clipboard. + * @param label The Plain-text label for the HTML content. + * @param text Plain-text representation of the HTML content. */ - @CalledByNative - private void setHTMLText(final String html, final String text) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - mClipboardManager.setPrimaryClip( - ClipData.newHtmlText(null, text, html)); + public void setHTMLText(final String html, final String label, final String text) { + if (isHTMLClipboardSupported()) { + setPrimaryClipNoException(ClipData.newHtmlText(label, text, html)); } } /** - * Approximates the behavior of the now-deprecated - * {@link android.text.ClipboardManager#hasText()}, returning true if and - * only if the clipboard has a primary clip and that clip contains a plain - * non-empty text entry (without attempting coercion - URLs and intents - * will cause this method to return false). + * Writes HTML to the clipboard, together with a plain-text representation + * of that very data. This API is only available in Android JellyBean+ and + * will be a no-operation in older versions. * - * @return as described above + * @param html The HTML content to be pasted to the clipboard. + * @param text Plain-text representation of the HTML content. */ - @SuppressWarnings("javadoc") @CalledByNative - private boolean hasPlainText() { - final ClipData clip = mClipboardManager.getPrimaryClip(); - if (clip != null && clip.getItemCount() > 0) { - final CharSequence text = clip.getItemAt(0).getText(); - return !TextUtils.isEmpty(text); + public void setHTMLText(final String html, final String text) { + setHTMLText(html, null, text); + } + + @CalledByNative + private static boolean isHTMLClipboardSupported() { + return ApiCompatibilityUtils.isHTMLClipboardSupported(); + } + + private void setPrimaryClipNoException(ClipData clip) { + try { + mClipboardManager.setPrimaryClip(clip); + } catch (Exception ex) { + // Ignore any exceptions here as certain devices have bugs and will fail. + String text = mContext.getString(R.string.copy_to_clipboard_failure_message); + Toast.makeText(mContext, text, Toast.LENGTH_SHORT).show(); } - return false; } } diff --git a/ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java b/ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java index 1095b649a6..839a860248 100644 --- a/ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java +++ b/ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java @@ -1,4 +1,4 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright 2012 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. diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java index 4e269b0ad0..6d85a354c2 100644 --- a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java +++ b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java @@ -1,4 +1,4 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright 2012 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. @@ -7,7 +7,6 @@ package org.chromium.ui.base; import android.app.Activity; import android.content.ContentResolver; import android.content.Intent; -import android.database.Cursor; import android.net.Uri; import android.os.Environment; import android.provider.MediaStore; @@ -16,7 +15,6 @@ import android.text.TextUtils; import org.chromium.base.CalledByNative; import org.chromium.base.JNINamespace; import org.chromium.ui.R; -import org.chromium.ui.base.WindowAndroid; import java.io.File; import java.util.ArrayList; @@ -193,7 +191,7 @@ class SelectFileDialog implements WindowAndroid.IntentCallback{ } private boolean shouldShowImageTypes() { - return shouldShowTypes(ALL_IMAGE_TYPES,IMAGE_TYPE); + return shouldShowTypes(ALL_IMAGE_TYPES, IMAGE_TYPE); } private boolean shouldShowVideoTypes() { diff --git a/ui/android/java/src/org/chromium/ui/base/ViewAndroid.java b/ui/android/java/src/org/chromium/ui/base/ViewAndroid.java index e91911cc33..c765a56da3 100644 --- a/ui/android/java/src/org/chromium/ui/base/ViewAndroid.java +++ b/ui/android/java/src/org/chromium/ui/base/ViewAndroid.java @@ -1,4 +1,4 @@ -// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Copyright 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. @@ -7,8 +7,6 @@ package org.chromium.ui.base; import android.view.View; import org.chromium.base.JNINamespace; -import org.chromium.ui.base.ViewAndroidDelegate; -import org.chromium.ui.base.WindowAndroid; /** * From the Chromium architecture point of view, ViewAndroid and its native counterpart diff --git a/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java b/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java index 34d280a10e..6d3694cc9b 100644 --- a/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java +++ b/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java @@ -1,4 +1,4 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright 2012 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. diff --git a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java index fc4dfeaccc..44469e57c1 100644 --- a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java +++ b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java @@ -1,4 +1,4 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright 2012 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. @@ -12,11 +12,11 @@ import android.util.Log; import android.util.SparseArray; import android.widget.Toast; -import java.util.HashMap; - import org.chromium.base.CalledByNative; import org.chromium.base.JNINamespace; +import java.util.HashMap; + /** * The window base class that has the minimum functionality. */ @@ -35,7 +35,7 @@ public class WindowAndroid { protected HashMap<Integer, String> mIntentErrors; /** - * @param context, the application context.. + * @param context The application context. */ public WindowAndroid(Context context) { assert context == context.getApplicationContext(); @@ -175,7 +175,7 @@ public class WindowAndroid { /** * Tests that an activity is available to handle the passed in intent. - * @param Intent the intent to check. + * @param intent The intent to check. * @return True if an activity is available to process this intent when started, meaning that * Context.startActivity will not throw ActivityNotFoundException. */ diff --git a/ui/android/java/src/org/chromium/ui/gfx/BitmapHelper.java b/ui/android/java/src/org/chromium/ui/gfx/BitmapHelper.java index 341eba0729..9138902236 100644 --- a/ui/android/java/src/org/chromium/ui/gfx/BitmapHelper.java +++ b/ui/android/java/src/org/chromium/ui/gfx/BitmapHelper.java @@ -1,4 +1,4 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright 2012 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. @@ -7,9 +7,13 @@ package org.chromium.ui.gfx; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; + import org.chromium.base.CalledByNative; import org.chromium.base.JNINamespace; +/** + * Helper class to decode and sample down bitmap resources. + */ @JNINamespace("gfx") public class BitmapHelper { @CalledByNative diff --git a/ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java b/ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java index 89325fb96f..188c405c7c 100644 --- a/ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java +++ b/ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java @@ -1,11 +1,11 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright 2012 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. package org.chromium.ui.gfx; -import android.content.Context; import android.content.ComponentCallbacks; +import android.content.Context; import android.content.res.Configuration; import android.graphics.PixelFormat; import android.os.Build; @@ -27,152 +27,153 @@ import org.chromium.base.JNINamespace; public class DeviceDisplayInfo { - private final Context mAppContext; - private final WindowManager mWinManager; - - private DeviceDisplayInfo(Context context) { - mAppContext = context.getApplicationContext(); - mWinManager = (WindowManager) mAppContext.getSystemService(Context.WINDOW_SERVICE); - } - - /** - * @return Display height in physical pixels. - */ - @CalledByNative - public int getDisplayHeight() { - return getMetrics().heightPixels; - } - - /** - * @return Display width in physical pixels. - */ - @CalledByNative - public int getDisplayWidth() { - return getMetrics().widthPixels; - } - - @SuppressWarnings("deprecation") - private int getPixelFormat() { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { - return getDisplay().getPixelFormat(); - } - // JellyBean MR1 and later always uses RGBA_8888. - return PixelFormat.RGBA_8888; - } - - /** - * @return Bits per pixel. - */ - @CalledByNative - public int getBitsPerPixel() { - int format = getPixelFormat(); - PixelFormat info = new PixelFormat(); - PixelFormat.getPixelFormatInfo(format, info); - return info.bitsPerPixel; - } - - /** - * @return Bits per component. - */ - @SuppressWarnings("deprecation") - @CalledByNative - public int getBitsPerComponent() { - int format = getPixelFormat(); - switch (format) { - case PixelFormat.RGBA_4444: - return 4; - - case PixelFormat.RGBA_5551: - return 5; - - case PixelFormat.RGBA_8888: - case PixelFormat.RGBX_8888: - case PixelFormat.RGB_888: - return 8; - - case PixelFormat.RGB_332: - return 2; - - case PixelFormat.RGB_565: - return 5; - - // Non-RGB formats. - case PixelFormat.A_8: - case PixelFormat.LA_88: - case PixelFormat.L_8: - return 0; - - // Unknown format. Use 8 as a sensible default. - default: - return 8; - } - } - - /** - * @return A scaling factor for the Density Independent Pixel unit. - * 1.0 is 160dpi, 0.75 is 120dpi, 2.0 is 320dpi. - */ - @CalledByNative - public double getDIPScale() { - return getMetrics().density; - } - - /** - * @return Smallest screen size in density-independent pixels that the - * application will see, regardless of orientation. - */ - @CalledByNative - private int getSmallestDIPWidth() { - return mAppContext.getResources().getConfiguration().smallestScreenWidthDp; - } - - private void registerListener() { - mAppContext.registerComponentCallbacks( - new ComponentCallbacks() { - @Override - public void onConfigurationChanged(Configuration configuration) { - updateNativeSharedDisplayInfo(); - } - - @Override - public void onLowMemory() { - } - }); - } - - private void updateNativeSharedDisplayInfo() { - nativeUpdateSharedDeviceDisplayInfo(getDisplayHeight(), - getDisplayWidth(), getBitsPerPixel(), getBitsPerComponent(), - getDIPScale(), getSmallestDIPWidth()); - } - - private Display getDisplay() { - return mWinManager.getDefaultDisplay(); - } - - private DisplayMetrics getMetrics() { - return mAppContext.getResources().getDisplayMetrics(); - } - - /** - * Creates DeviceDisplayInfo for a given Context. - * @param context A context to use. - * @return DeviceDisplayInfo associated with a given Context. - */ - public static DeviceDisplayInfo create(Context context) { - return new DeviceDisplayInfo(context); - } - - @CalledByNative - private static DeviceDisplayInfo createWithListener(Context context) { - DeviceDisplayInfo deviceDisplayInfo = new DeviceDisplayInfo(context); - deviceDisplayInfo.registerListener(); - return deviceDisplayInfo; - } - - private native void nativeUpdateSharedDeviceDisplayInfo(int displayHeight, - int displayWidth, int bitsPerPixel, - int bitsPerComponent, double dipScale, - int smallestDIPWidth); + private final Context mAppContext; + private final WindowManager mWinManager; + + private DeviceDisplayInfo(Context context) { + mAppContext = context.getApplicationContext(); + mWinManager = (WindowManager) mAppContext.getSystemService(Context.WINDOW_SERVICE); + } + + /** + * @return Display height in physical pixels. + */ + @CalledByNative + public int getDisplayHeight() { + return getMetrics().heightPixels; + } + + /** + * @return Display width in physical pixels. + */ + @CalledByNative + public int getDisplayWidth() { + return getMetrics().widthPixels; + } + + @SuppressWarnings("deprecation") + private int getPixelFormat() { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { + return getDisplay().getPixelFormat(); + } + // JellyBean MR1 and later always uses RGBA_8888. + return PixelFormat.RGBA_8888; + } + + /** + * @return Bits per pixel. + */ + @CalledByNative + public int getBitsPerPixel() { + int format = getPixelFormat(); + PixelFormat info = new PixelFormat(); + PixelFormat.getPixelFormatInfo(format, info); + return info.bitsPerPixel; + } + + /** + * @return Bits per component. + */ + @SuppressWarnings("deprecation") + @CalledByNative + public int getBitsPerComponent() { + int format = getPixelFormat(); + switch (format) { + case PixelFormat.RGBA_4444: + return 4; + + case PixelFormat.RGBA_5551: + return 5; + + case PixelFormat.RGBA_8888: + case PixelFormat.RGBX_8888: + case PixelFormat.RGB_888: + return 8; + + case PixelFormat.RGB_332: + return 2; + + case PixelFormat.RGB_565: + return 5; + + // Non-RGB formats. + case PixelFormat.A_8: + case PixelFormat.LA_88: + case PixelFormat.L_8: + return 0; + + // Unknown format. Use 8 as a sensible default. + default: + return 8; + } + } + + /** + * @return A scaling factor for the Density Independent Pixel unit. 1.0 is + * 160dpi, 0.75 is 120dpi, 2.0 is 320dpi. + */ + @CalledByNative + public double getDIPScale() { + return getMetrics().density; + } + + /** + * @return Smallest screen size in density-independent pixels that the + * application will see, regardless of orientation. + */ + @CalledByNative + private int getSmallestDIPWidth() { + return mAppContext.getResources().getConfiguration().smallestScreenWidthDp; + } + + private void registerListener() { + mAppContext.registerComponentCallbacks( + new ComponentCallbacks() { + @Override + public void onConfigurationChanged(Configuration configuration) { + updateNativeSharedDisplayInfo(); + } + + @Override + public void onLowMemory() { + } + }); + } + + private void updateNativeSharedDisplayInfo() { + nativeUpdateSharedDeviceDisplayInfo(getDisplayHeight(), + getDisplayWidth(), getBitsPerPixel(), getBitsPerComponent(), + getDIPScale(), getSmallestDIPWidth()); + } + + private Display getDisplay() { + return mWinManager.getDefaultDisplay(); + } + + private DisplayMetrics getMetrics() { + return mAppContext.getResources().getDisplayMetrics(); + } + + /** + * Creates DeviceDisplayInfo for a given Context. + * + * @param context A context to use. + * @return DeviceDisplayInfo associated with a given Context. + */ + public static DeviceDisplayInfo create(Context context) { + return new DeviceDisplayInfo(context); + } + + @CalledByNative + private static DeviceDisplayInfo createWithListener(Context context) { + DeviceDisplayInfo deviceDisplayInfo = new DeviceDisplayInfo(context); + deviceDisplayInfo.registerListener(); + return deviceDisplayInfo; + } + + private native void nativeUpdateSharedDeviceDisplayInfo(int displayHeight, + int displayWidth, int bitsPerPixel, + int bitsPerComponent, double dipScale, + int smallestDIPWidth); } diff --git a/ui/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java b/ui/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java index 6e2d6feb7a..bc57e1faca 100644 --- a/ui/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java +++ b/ui/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java @@ -1,4 +1,4 @@ -// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Copyright 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. diff --git a/ui/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java b/ui/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java index 227c27fb9a..53d33036ed 100644 --- a/ui/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java +++ b/ui/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java @@ -6,6 +6,7 @@ package org.chromium.ui.gl; import android.graphics.SurfaceTexture; import android.os.Build; +import android.util.Log; import org.chromium.base.CalledByNative; import org.chromium.base.JNINamespace; @@ -16,6 +17,9 @@ import org.chromium.base.JNINamespace; */ @JNINamespace("gfx") class SurfaceTexturePlatformWrapper { + + private static final String TAG = "SurfaceTexturePlatformWrapper"; + @CalledByNative private static SurfaceTexture create(int textureId) { return new SurfaceTexture(textureId); @@ -30,13 +34,17 @@ class SurfaceTexturePlatformWrapper { @CalledByNative private static void setFrameAvailableCallback(SurfaceTexture surfaceTexture, long nativeSurfaceTextureListener) { - surfaceTexture.setOnFrameAvailableListener( - new SurfaceTextureListener(nativeSurfaceTextureListener)); + surfaceTexture.setOnFrameAvailableListener( + new SurfaceTextureListener(nativeSurfaceTextureListener)); } @CalledByNative private static void updateTexImage(SurfaceTexture surfaceTexture) { - surfaceTexture.updateTexImage(); + try { + surfaceTexture.updateTexImage(); + } catch (RuntimeException e) { + Log.e(TAG, "Error calling updateTexImage", e); + } } @CalledByNative diff --git a/ui/android/java/strings/android_ui_strings.grd b/ui/android/java/strings/android_ui_strings.grd index ee2f2d4cdf..4840aebc16 100644 --- a/ui/android/java/strings/android_ui_strings.grd +++ b/ui/android/java/strings/android_ui_strings.grd @@ -29,6 +29,33 @@ <message desc="Title of ColorPicker dialog. [CHAR-LIMIT=20]" name="IDS_COLOR_PICKER_DIALOG_TITLE"> Select color </message> + <message desc="Accessibility label for button to select the red color." name="IDS_COLOR_PICKER_BUTTON_RED"> + Red + </message> + <message desc="Accessibility label for button to select the cyan color." name="IDS_COLOR_PICKER_BUTTON_CYAN"> + Cyan + </message> + <message desc="Accessibility label for button to select the blue color." name="IDS_COLOR_PICKER_BUTTON_BLUE"> + Blue + </message> + <message desc="Accessibility label for button to select the green color." name="IDS_COLOR_PICKER_BUTTON_GREEN"> + Green + </message> + <message desc="Accessibility label for button to select the magenta color." name="IDS_COLOR_PICKER_BUTTON_MAGENTA"> + Magenta + </message> + <message desc="Accessibility label for button to select the yellow color." name="IDS_COLOR_PICKER_BUTTON_YELLOW"> + Yellow + </message> + <message desc="Accessibility label for button to select the black color." name="IDS_COLOR_PICKER_BUTTON_BLACK"> + Black + </message> + <message desc="Accessibility label for button to select the white color." name="IDS_COLOR_PICKER_BUTTON_WHITE"> + White + </message> + <message desc="Notification for when copying to the clipboard fails. [CHAR-LIMIT=64]" name="IDS_COPY_TO_CLIPBOARD_FAILURE_MESSAGE"> + Failed to copy to the clipboard + </message> </messages> </release> <translations> diff --git a/ui/android/window_open_disposition_java.target.darwin-arm.mk b/ui/android/window_open_disposition_java.target.darwin-arm.mk index c2c8af9158..d15e2960da 100644 --- a/ui/android/window_open_disposition_java.target.darwin-arm.mk +++ b/ui/android/window_open_disposition_java.target.darwin-arm.mk @@ -77,6 +77,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -86,9 +87,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -156,6 +159,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -165,9 +169,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/android/window_open_disposition_java.target.darwin-mips.mk b/ui/android/window_open_disposition_java.target.darwin-mips.mk index 27da2ae8fd..85f13daa89 100644 --- a/ui/android/window_open_disposition_java.target.darwin-mips.mk +++ b/ui/android/window_open_disposition_java.target.darwin-mips.mk @@ -76,6 +76,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -85,9 +86,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -154,6 +157,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -163,9 +167,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/android/window_open_disposition_java.target.darwin-x86.mk b/ui/android/window_open_disposition_java.target.darwin-x86.mk index a959595745..b1d0c85b1a 100644 --- a/ui/android/window_open_disposition_java.target.darwin-x86.mk +++ b/ui/android/window_open_disposition_java.target.darwin-x86.mk @@ -79,6 +79,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -88,9 +89,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -161,6 +164,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -170,9 +174,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/android/window_open_disposition_java.target.linux-arm.mk b/ui/android/window_open_disposition_java.target.linux-arm.mk index c2c8af9158..d15e2960da 100644 --- a/ui/android/window_open_disposition_java.target.linux-arm.mk +++ b/ui/android/window_open_disposition_java.target.linux-arm.mk @@ -77,6 +77,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -86,9 +87,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -156,6 +159,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -165,9 +169,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/android/window_open_disposition_java.target.linux-mips.mk b/ui/android/window_open_disposition_java.target.linux-mips.mk index 27da2ae8fd..85f13daa89 100644 --- a/ui/android/window_open_disposition_java.target.linux-mips.mk +++ b/ui/android/window_open_disposition_java.target.linux-mips.mk @@ -76,6 +76,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -85,9 +86,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -154,6 +157,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -163,9 +167,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/android/window_open_disposition_java.target.linux-x86.mk b/ui/android/window_open_disposition_java.target.linux-x86.mk index a959595745..b1d0c85b1a 100644 --- a/ui/android/window_open_disposition_java.target.linux-x86.mk +++ b/ui/android/window_open_disposition_java.target.linux-x86.mk @@ -79,6 +79,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -88,9 +89,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -161,6 +164,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -170,9 +174,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/app_list/app_list.gyp b/ui/app_list/app_list.gyp index b4339f734d..e766c21808 100644 --- a/ui/app_list/app_list.gyp +++ b/ui/app_list/app_list.gyp @@ -80,6 +80,9 @@ 'search_result.h', 'signin_delegate.cc', 'signin_delegate.h', + 'speech_ui_model.cc', + 'speech_ui_model.h', + 'speech_ui_model_observer.h', 'views/apps_container_view.cc', 'views/apps_container_view.h', 'views/app_list_background.cc', @@ -95,6 +98,7 @@ 'views/app_list_menu_views.h', 'views/app_list_view.cc', 'views/app_list_view.h', + 'views/app_list_view_observer.h', 'views/apps_grid_view.cc', 'views/apps_grid_view.h', 'views/apps_grid_view_delegate.h', @@ -124,6 +128,8 @@ 'views/search_result_view_delegate.h', 'views/signin_view.cc', 'views/signin_view.h', + 'views/speech_view.cc', + 'views/speech_view.h', ], 'conditions': [ ['use_aura==1', { @@ -209,6 +215,7 @@ 'cocoa/signin_view_controller_unittest.mm', 'cocoa/test/apps_grid_controller_test_helper.h', 'cocoa/test/apps_grid_controller_test_helper.mm', + 'views/app_list_main_view_unittest.cc', 'views/apps_grid_view_unittest.cc', 'views/test/apps_grid_view_test_api.cc', 'views/test/apps_grid_view_test_api.h', diff --git a/ui/app_list/app_list_model.cc b/ui/app_list/app_list_model.cc index 535fff27c3..b37ec610e4 100644 --- a/ui/app_list/app_list_model.cc +++ b/ui/app_list/app_list_model.cc @@ -15,7 +15,6 @@ AppListModel::AppListModel() : item_list_(new AppListItemList), search_box_(new SearchBoxModel), results_(new SearchResults), - signed_in_(false), status_(STATUS_NORMAL) { } @@ -40,14 +39,4 @@ void AppListModel::SetStatus(Status status) { OnAppListModelStatusChanged()); } -void AppListModel::SetSignedIn(bool signed_in) { - if (signed_in_ == signed_in) - return; - - signed_in_ = signed_in; - FOR_EACH_OBSERVER(AppListModelObserver, - observers_, - OnAppListModelSigninStatusChanged()); -} - } // namespace app_list diff --git a/ui/app_list/app_list_model.h b/ui/app_list/app_list_model.h index 9b3235f1d3..a0d2a39ec6 100644 --- a/ui/app_list/app_list_model.h +++ b/ui/app_list/app_list_model.h @@ -40,20 +40,17 @@ class APP_LIST_EXPORT AppListModel { void RemoveObserver(AppListModelObserver* observer); void SetStatus(Status status); - void SetSignedIn(bool signed_in); AppListItemList* item_list() { return item_list_.get(); } SearchBoxModel* search_box() { return search_box_.get(); } SearchResults* results() { return results_.get(); } Status status() const { return status_; } - bool signed_in() const { return signed_in_; } private: scoped_ptr<AppListItemList> item_list_; scoped_ptr<SearchBoxModel> search_box_; scoped_ptr<SearchResults> results_; - bool signed_in_; Status status_; ObserverList<AppListModelObserver> observers_; diff --git a/ui/app_list/app_list_model_observer.h b/ui/app_list/app_list_model_observer.h index ddd0f743d2..8810c821c5 100644 --- a/ui/app_list/app_list_model_observer.h +++ b/ui/app_list/app_list_model_observer.h @@ -14,9 +14,6 @@ class APP_LIST_EXPORT AppListModelObserver { // Invoked when AppListModel's status has changed. virtual void OnAppListModelStatusChanged() {} - // Invoked when AppListModel's current user's signin status has changed. - virtual void OnAppListModelSigninStatusChanged() {} - protected: virtual ~AppListModelObserver() {} }; diff --git a/ui/app_list/app_list_model_unittest.cc b/ui/app_list/app_list_model_unittest.cc index 6fbf912726..24a7145871 100644 --- a/ui/app_list/app_list_model_unittest.cc +++ b/ui/app_list/app_list_model_unittest.cc @@ -24,7 +24,6 @@ class TestObserver : public AppListModelObserver, public: TestObserver() : status_changed_count_(0), - signin_changed_count_(0), items_added_(0), items_removed_(0), items_moved_(0) { @@ -37,10 +36,6 @@ class TestObserver : public AppListModelObserver, ++status_changed_count_; } - virtual void OnAppListModelSigninStatusChanged() OVERRIDE { - ++signin_changed_count_; - } - // AppListItemListObserver virtual void OnListItemAdded(size_t index, AppListItemModel* item) OVERRIDE { items_added_++; @@ -123,19 +118,6 @@ TEST_F(AppListModelTest, SetStatus) { EXPECT_EQ(2, observer_.status_changed_count()); } -TEST_F(AppListModelTest, SetSignedIn) { - EXPECT_TRUE(model_.signed_in()); - model_.SetSignedIn(false); - EXPECT_EQ(1, observer_.signin_changed_count()); - EXPECT_FALSE(model_.signed_in()); - model_.SetSignedIn(true); - EXPECT_EQ(2, observer_.signin_changed_count()); - EXPECT_TRUE(model_.signed_in()); - // Set the same signin state, no change is expected. - model_.SetSignedIn(true); - EXPECT_EQ(2, observer_.signin_changed_count()); -} - TEST_F(AppListModelTest, AppsObserver) { const size_t num_apps = 2; model_.PopulateApps(num_apps); @@ -174,12 +156,11 @@ TEST_F(AppListModelTest, ModelAddItem) { ASSERT_EQ(num_apps + 1, model_.item_list()->item_count()); EXPECT_EQ("Added Item 1", model_.item_list()->item_at(num_apps)->id()); // Add an item between items 0 and 1. - app_list::AppListItemModel* item0 = model_.item_list()->item_at(0); + AppListItemModel* item0 = model_.item_list()->item_at(0); ASSERT_TRUE(item0); - app_list::AppListItemModel* item1 = model_.item_list()->item_at(1); + AppListItemModel* item1 = model_.item_list()->item_at(1); ASSERT_TRUE(item1); - app_list::AppListItemModel* item2 = - model_.CreateItem("Added Item 2", "Added Item 2"); + AppListItemModel* item2 = model_.CreateItem("Added Item 2", "Added Item 2"); item2->set_position(item0->position().CreateBetween(item1->position())); model_.item_list()->AddItem(item2); EXPECT_EQ(num_apps + 2, model_.item_list()->item_count()); diff --git a/ui/app_list/app_list_view_delegate.h b/ui/app_list/app_list_view_delegate.h index 4da51a67ee..235e126b51 100644 --- a/ui/app_list/app_list_view_delegate.h +++ b/ui/app_list/app_list_view_delegate.h @@ -29,8 +29,10 @@ namespace app_list { class AppListItemModel; class AppListModel; +class AppListViewDelegateObserver; class SearchResult; class SigninDelegate; +class SpeechUIModel; class APP_LIST_EXPORT AppListViewDelegate { public: @@ -71,6 +73,9 @@ class APP_LIST_EXPORT AppListViewDelegate { // Gets the SigninDelegate for the app list. Owned by the AppListViewDelegate. virtual SigninDelegate* GetSigninDelegate() = 0; + // Gets the SpeechUIModel for the app list. Owned by the AppListViewDelegate. + virtual SpeechUIModel* GetSpeechUI() = 0; + // Gets a path to a shortcut for the given app. Returns asynchronously as the // shortcut may not exist yet. virtual void GetShortcutPathForApp( @@ -124,6 +129,10 @@ class APP_LIST_EXPORT AppListViewDelegate { // Returns the list of users (for AppListMenu). virtual const Users& GetUsers() const = 0; + + // Adds/removes an observer for profile changes. + virtual void AddObserver(AppListViewDelegateObserver* observer) {} + virtual void RemoveObserver(AppListViewDelegateObserver* observer) {} }; } // namespace app_list diff --git a/ui/app_list/app_list_view_delegate_observer.h b/ui/app_list/app_list_view_delegate_observer.h new file mode 100644 index 0000000000..a612334e69 --- /dev/null +++ b/ui/app_list/app_list_view_delegate_observer.h @@ -0,0 +1,24 @@ +// Copyright 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. + +#ifndef UI_APP_LIST_APP_LIST_VIEW_DELEGATE_OBSERVER_H_ +#define UI_APP_LIST_APP_LIST_VIEW_DELEGATE_OBSERVER_H_ + +#include "ui/app_list/app_list_export.h" + +namespace app_list { + +class APP_LIST_EXPORT AppListViewDelegateObserver { + public: + // Invoked when the Profiles shown on the app list change, or the active + // profile changes its signin status. + virtual void OnProfilesChanged() = 0; + + protected: + virtual ~AppListViewDelegateObserver() {} +}; + +} // namespace app_list + +#endif // UI_APP_LIST_APP_LIST_VIEW_DELEGATE_OBSERVER_H_ diff --git a/ui/app_list/cocoa/app_list_view_controller.h b/ui/app_list/cocoa/app_list_view_controller.h index 3573ab1264..e4ffcbcb6d 100644 --- a/ui/app_list/cocoa/app_list_view_controller.h +++ b/ui/app_list/cocoa/app_list_view_controller.h @@ -51,14 +51,19 @@ APP_LIST_EXPORT BOOL showingSearchResults_; } +@property(readonly, nonatomic) AppsSearchBoxController* + searchBoxController; + - (app_list::AppListViewDelegate*)delegate; - (void)setDelegate:(scoped_ptr<app_list::AppListViewDelegate>)newDelegate; -- (void)onSigninStatusChanged; +- (void)onProfilesChanged; @end @interface AppListViewController (TestingAPI) +@property(nonatomic, readonly) BOOL showingSearchResults; + - (AppsGridController*)appsGridController; - (NSSegmentedControl*)pagerControl; - (NSView*)backgroundView; diff --git a/ui/app_list/cocoa/app_list_view_controller.mm b/ui/app_list/cocoa/app_list_view_controller.mm index 51a71cfa94..ad73540f6e 100644 --- a/ui/app_list/cocoa/app_list_view_controller.mm +++ b/ui/app_list/cocoa/app_list_view_controller.mm @@ -10,8 +10,8 @@ #include "skia/ext/skia_utils_mac.h" #include "ui/app_list/app_list_constants.h" #include "ui/app_list/app_list_model.h" -#include "ui/app_list/app_list_model_observer.h" #include "ui/app_list/app_list_view_delegate.h" +#include "ui/app_list/app_list_view_delegate_observer.h" #include "ui/app_list/signin_delegate.h" #import "ui/app_list/cocoa/app_list_pager_view.h" #import "ui/app_list/cocoa/apps_grid_controller.h" @@ -81,14 +81,14 @@ const NSTimeInterval kResultsAnimationDuration = 0.2; namespace app_list { -class AppListModelObserverBridge : public AppListModelObserver { +class AppListModelObserverBridge : public AppListViewDelegateObserver { public: AppListModelObserverBridge(AppListViewController* parent); virtual ~AppListModelObserverBridge(); private: - // Overridden from app_list::AppListModelObserver: - virtual void OnAppListModelSigninStatusChanged() OVERRIDE; + // Overridden from app_list::AppListViewDelegateObserver: + virtual void OnProfilesChanged() OVERRIDE; AppListViewController* parent_; // Weak. Owns us. @@ -98,15 +98,15 @@ class AppListModelObserverBridge : public AppListModelObserver { AppListModelObserverBridge::AppListModelObserverBridge( AppListViewController* parent) : parent_(parent) { - [[parent_ appsGridController] model]->AddObserver(this); + [parent_ delegate]->AddObserver(this); } AppListModelObserverBridge::~AppListModelObserverBridge() { - [[parent_ appsGridController] model]->RemoveObserver(this); + [parent_ delegate]->RemoveObserver(this); } -void AppListModelObserverBridge::OnAppListModelSigninStatusChanged() { - [parent_ onSigninStatusChanged]; +void AppListModelObserverBridge::OnProfilesChanged() { + [parent_ onProfilesChanged]; } } // namespace app_list @@ -134,6 +134,14 @@ void AppListModelObserverBridge::OnAppListModelSigninStatusChanged() { [super dealloc]; } +- (AppsSearchBoxController*)searchBoxController { + return appsSearchBoxController_; +} + +- (BOOL)showingSearchResults { + return showingSearchResults_; +} + - (AppsGridController*)appsGridController { return appsGridController_; } @@ -166,7 +174,7 @@ void AppListModelObserverBridge::OnAppListModelSigninStatusChanged() { [appsSearchResultsController_ setDelegate:self]; app_list_model_observer_bridge_.reset( new app_list::AppListModelObserverBridge(self)); - [self onSigninStatusChanged]; + [self onProfilesChanged]; } -(void)loadAndSetView { @@ -315,25 +323,22 @@ void AppListModelObserverBridge::OnAppListModelSigninStatusChanged() { - (void)openResult:(app_list::SearchResult*)result { if (delegate_) delegate_->OpenSearchResult(result, 0 /* event flags */); - - [appsSearchBoxController_ clearSearch]; } - (void)redoSearch { [self modelTextDidChange]; } -- (void)onSigninStatusChanged { +- (void)onProfilesChanged { [appsSearchBoxController_ rebuildMenu]; app_list::SigninDelegate* signinDelegate = delegate_ ? delegate_->GetSigninDelegate() : NULL; - BOOL show_signin_view = - signinDelegate && ![appsGridController_ model]->signed_in(); + BOOL showSigninView = signinDelegate && signinDelegate->NeedSignin(); [[signinViewController_ view] removeFromSuperview]; signinViewController_.reset(); - if (!show_signin_view) { + if (!showSigninView) { [backgroundView_ setHidden:NO]; return; } diff --git a/ui/app_list/cocoa/app_list_view_controller_unittest.mm b/ui/app_list/cocoa/app_list_view_controller_unittest.mm index 2f1ea39e59..0a7d82b1fa 100644 --- a/ui/app_list/cocoa/app_list_view_controller_unittest.mm +++ b/ui/app_list/cocoa/app_list_view_controller_unittest.mm @@ -7,22 +7,20 @@ #import "ui/app_list/cocoa/app_list_view_controller.h" #import "ui/app_list/cocoa/apps_grid_controller.h" #import "ui/app_list/cocoa/test/apps_grid_controller_test_helper.h" -#include "ui/app_list/signin_delegate.h" #include "ui/app_list/test/app_list_test_model.h" #include "ui/app_list/test/app_list_test_view_delegate.h" namespace app_list { namespace test { -class AppListViewControllerTest : public AppsGridControllerTestHelper, - public SigninDelegate { +class AppListViewControllerTest : public AppsGridControllerTestHelper { public: AppListViewControllerTest() {} virtual void SetUp() OVERRIDE { app_list_view_controller_.reset([[AppListViewController alloc] init]); scoped_ptr<AppListTestViewDelegate> delegate(new AppListTestViewDelegate); - delegate->set_test_signin_delegate(this); + delegate->SetSignedIn(true); [app_list_view_controller_ setDelegate:delegate.PassAs<app_list::AppListViewDelegate>()]; SetUpWithGridController([app_list_view_controller_ appsGridController]); @@ -45,26 +43,6 @@ class AppListViewControllerTest : public AppsGridControllerTestHelper, setDelegate:delegate.PassAs<app_list::AppListViewDelegate>()]; } - // SigninDelegate overrides: - virtual bool NeedSignin() OVERRIDE { return false; } - virtual void ShowSignin() OVERRIDE {} - virtual void OpenLearnMore() OVERRIDE {} - virtual void OpenSettings() OVERRIDE {} - - virtual base::string16 GetSigninHeading() OVERRIDE { - return base::string16(); - } - virtual base::string16 GetSigninText() OVERRIDE { return base::string16(); } - virtual base::string16 GetSigninButtonText() OVERRIDE { - return base::string16(); - } - virtual base::string16 GetLearnMoreLinkText() OVERRIDE { - return base::string16(); - } - virtual base::string16 GetSettingsLinkText() OVERRIDE { - return base::string16(); - } - AppListTestViewDelegate* delegate() { return static_cast<AppListTestViewDelegate*>( [app_list_view_controller_ delegate]); @@ -136,12 +114,12 @@ TEST_F(AppListViewControllerTest, SignedIn) { // Test the view when signin is required. TEST_F(AppListViewControllerTest, NeedsSignin) { // Begin the test with a signed out app list. - model()->SetSignedIn(false); + delegate()->SetSignedIn(false); EXPECT_EQ(2u, [[[app_list_view_controller_ view] subviews] count]); EXPECT_TRUE([[app_list_view_controller_ backgroundView] isHidden]); // Simulate signing in, should enter the SignedIn state. - model()->SetSignedIn(true); + delegate()->SetSignedIn(true); EXPECT_EQ(1u, [[[app_list_view_controller_ view] subviews] count]); EXPECT_FALSE([[app_list_view_controller_ backgroundView] isHidden]); } diff --git a/ui/app_list/cocoa/app_list_window_controller.mm b/ui/app_list/cocoa/app_list_window_controller.mm index 47edab0507..9d35902946 100644 --- a/ui/app_list/cocoa/app_list_window_controller.mm +++ b/ui/app_list/cocoa/app_list_window_controller.mm @@ -7,6 +7,7 @@ #include "ui/app_list/app_list_view_delegate.h" #import "ui/app_list/cocoa/app_list_view_controller.h" #import "ui/app_list/cocoa/apps_grid_controller.h" +#import "ui/app_list/cocoa/apps_search_box_controller.h" #include "ui/base/cocoa/window_size_constants.h" @interface AppListWindow : NSWindow; @@ -39,6 +40,8 @@ [controlledWindow setOpaque:NO]; [controlledWindow setHasShadow:YES]; [controlledWindow setLevel:NSDockWindowLevel]; + [controlledWindow + setCollectionBehavior:NSWindowCollectionBehaviorMoveToActiveSpace]; if ((self = [super initWithWindow:controlledWindow])) { appListViewController_.reset([[AppListViewController alloc] init]); @@ -59,4 +62,8 @@ [appListViewController_ delegate]->Dismiss(); } +- (void)windowWillClose:(NSNotification*)notification { + [[appListViewController_ searchBoxController] clearSearch]; +} + @end diff --git a/ui/app_list/cocoa/app_list_window_controller_unittest.mm b/ui/app_list/cocoa/app_list_window_controller_unittest.mm index 68b273d71a..0f76691775 100644 --- a/ui/app_list/cocoa/app_list_window_controller_unittest.mm +++ b/ui/app_list/cocoa/app_list_window_controller_unittest.mm @@ -3,10 +3,12 @@ // found in the LICENSE file. #import "base/mac/scoped_nsobject.h" +#include "base/strings/utf_string_conversions.h" #import "testing/gtest_mac.h" #include "ui/app_list/app_list_view_delegate.h" #import "ui/app_list/cocoa/app_list_view_controller.h" #import "ui/app_list/cocoa/app_list_window_controller.h" +#include "ui/app_list/search_box_model.h" #include "ui/app_list/test/app_list_test_view_delegate.h" #import "ui/base/test/ui_cocoa_test_helper.h" @@ -68,3 +70,26 @@ TEST_F(AppListWindowControllerTest, DismissWithEscape) { [[controller_ window] cancelOperation:controller_]; EXPECT_EQ(1, delegate()->dismiss_count()); } + +// Test that search results are cleared when the window closes, not when a +// search result is selected. If cleared upon selection, the animation showing +// the results sliding away is seen as the window closes, which looks weird. +TEST_F(AppListWindowControllerTest, CloseClearsSearch) { + [[controller_ window] makeKeyAndOrderFront:nil]; + app_list::SearchBoxModel* model = delegate()->GetModel()->search_box(); + AppListViewController* view_controller = [controller_ appListViewController]; + + EXPECT_FALSE([view_controller showingSearchResults]); + + const base::string16 search_text(ASCIIToUTF16("test")); + model->SetText(search_text); + EXPECT_TRUE([view_controller showingSearchResults]); + + EXPECT_EQ(0, delegate()->open_search_result_count()); + [view_controller openResult:nil]; + EXPECT_EQ(1, delegate()->open_search_result_count()); + + EXPECT_TRUE([view_controller showingSearchResults]); + [[controller_ window] close]; // Hide. + EXPECT_FALSE([view_controller showingSearchResults]); +} diff --git a/ui/app_list/cocoa/apps_grid_view_item.mm b/ui/app_list/cocoa/apps_grid_view_item.mm index ccd6b80db8..08304da155 100644 --- a/ui/app_list/cocoa/apps_grid_view_item.mm +++ b/ui/app_list/cocoa/apps_grid_view_item.mm @@ -458,4 +458,11 @@ void ItemModelObserverBridge::ItemPercentDownloadedChanged() { inView:controlView]; } +// Workaround for http://crbug.com/324365: AppKit in Mavericks tries to call +// - [NSButtonCell item] when inspecting accessibility. Without this, an +// unrecognized selector exception is thrown inside AppKit, crashing Chrome. +- (id)item { + return nil; +} + @end diff --git a/ui/app_list/cocoa/apps_search_box_controller.mm b/ui/app_list/cocoa/apps_search_box_controller.mm index 1ef31e308a..b937c4c4c1 100644 --- a/ui/app_list/cocoa/apps_search_box_controller.mm +++ b/ui/app_list/cocoa/apps_search_box_controller.mm @@ -54,7 +54,6 @@ class SearchBoxModelObserverBridge : public SearchBoxModelObserver { virtual void IconChanged() OVERRIDE; virtual void SpeechRecognitionButtonPropChanged() OVERRIDE; - virtual void SetSpeechRecognitionButtonState(bool toggled) OVERRIDE; virtual void HintTextChanged() OVERRIDE; virtual void SelectionModelChanged() OVERRIDE; virtual void TextChanged() OVERRIDE; @@ -103,12 +102,6 @@ void SearchBoxModelObserverBridge::SpeechRecognitionButtonPropChanged() { NOTIMPLEMENTED(); } -void SearchBoxModelObserverBridge::SetSpeechRecognitionButtonState( - bool toggled) { - // TODO(mukai): implement. - NOTIMPLEMENTED(); -} - void SearchBoxModelObserverBridge::HintTextChanged() { [[[parent_ searchTextField] cell] setPlaceholderString: base::SysUTF16ToNSString(GetModel()->hint_text())]; diff --git a/ui/app_list/cocoa/apps_search_results_controller_unittest.mm b/ui/app_list/cocoa/apps_search_results_controller_unittest.mm index 63c1f26a04..27e04e9311 100644 --- a/ui/app_list/cocoa/apps_search_results_controller_unittest.mm +++ b/ui/app_list/cocoa/apps_search_results_controller_unittest.mm @@ -27,6 +27,8 @@ @property(readonly, nonatomic) app_list::SearchResult* lastOpenedResult; @property(readonly, nonatomic) int redoSearchCount; +- (void)quitMessageLoop; + @end @implementation TestAppsSearchResultsDelegate @@ -46,6 +48,10 @@ ++redoSearchCount_; } +- (void)quitMessageLoop { + base::MessageLoop::current()->QuitNow(); +} + @end namespace app_list { @@ -295,12 +301,13 @@ TEST_F(AppsSearchResultsControllerTest, ContextMenus) { } // Test that observing a search result item uninstall performs the search again. -// Disabled due to failure on 10.6 http://crbug.com/308828 - 10.7 is OK. -TEST_F(AppsSearchResultsControllerTest, DISABLED_UninstallRedperformsSearch) { +TEST_F(AppsSearchResultsControllerTest, UninstallReperformsSearch) { base::MessageLoopForUI message_loop; EXPECT_EQ(0, [delegate_ redoSearchCount]); ModelResultAt(0)->NotifyItemUninstalled(); - message_loop.PostTask(FROM_HERE, base::MessageLoop::QuitClosure()); + [delegate_ performSelector:@selector(quitMessageLoop) + withObject:nil + afterDelay:0]; message_loop.Run(); EXPECT_EQ(1, [delegate_ redoSearchCount]); } diff --git a/ui/app_list/search_box_model.cc b/ui/app_list/search_box_model.cc index d84b33c708..cd884a7d20 100644 --- a/ui/app_list/search_box_model.cc +++ b/ui/app_list/search_box_model.cc @@ -9,18 +9,14 @@ namespace app_list { -SearchBoxModel::ToggleButtonProperty::ToggleButtonProperty( +SearchBoxModel::ButtonProperty::ButtonProperty( const gfx::ImageSkia& icon, - const gfx::ImageSkia& toggled_icon, - const base::string16& tooltip, - const base::string16& toggled_tooltip) + const base::string16& tooltip) : icon(icon), - toggled_icon(toggled_icon), - tooltip(tooltip), - toggled_tooltip(toggled_tooltip) { + tooltip(tooltip) { } -SearchBoxModel::ToggleButtonProperty::~ToggleButtonProperty() { +SearchBoxModel::ButtonProperty::~ButtonProperty() { } SearchBoxModel::SearchBoxModel() { @@ -35,19 +31,13 @@ void SearchBoxModel::SetIcon(const gfx::ImageSkia& icon) { } void SearchBoxModel::SetSpeechRecognitionButton( - scoped_ptr<SearchBoxModel::ToggleButtonProperty> speech_button) { + scoped_ptr<SearchBoxModel::ButtonProperty> speech_button) { speech_button_ = speech_button.Pass(); FOR_EACH_OBSERVER(SearchBoxModelObserver, observers_, SpeechRecognitionButtonPropChanged()); } -void SearchBoxModel::SetSpeechRecognitionButtonState(bool toggled) { - FOR_EACH_OBSERVER(SearchBoxModelObserver, - observers_, - SetSpeechRecognitionButtonState(toggled)); -} - void SearchBoxModel::SetHintText(const base::string16& hint_text) { if (hint_text_ == hint_text) return; diff --git a/ui/app_list/search_box_model.h b/ui/app_list/search_box_model.h index 4cb0b41f6a..1c174819bf 100644 --- a/ui/app_list/search_box_model.h +++ b/ui/app_list/search_box_model.h @@ -23,18 +23,13 @@ class SearchBoxModelObserver; // text, cursor position and selected text in edit control. class APP_LIST_EXPORT SearchBoxModel { public: - // The properties of the button with toggled status. - struct APP_LIST_EXPORT ToggleButtonProperty { - ToggleButtonProperty(const gfx::ImageSkia& icon, - const gfx::ImageSkia& toggled_icon, - const base::string16& tooltip, - const base::string16& toggled_tooltip); - ~ToggleButtonProperty(); + // The properties of the button. + struct APP_LIST_EXPORT ButtonProperty { + ButtonProperty(const gfx::ImageSkia& icon, const base::string16& tooltip); + ~ButtonProperty(); gfx::ImageSkia icon; - gfx::ImageSkia toggled_icon; base::string16 tooltip; - base::string16 toggled_tooltip; }; SearchBoxModel(); @@ -45,14 +40,8 @@ class APP_LIST_EXPORT SearchBoxModel { const gfx::ImageSkia& icon() const { return icon_; } // Sets/gets the properties for the button of speech recognition. - void SetSpeechRecognitionButton( - scoped_ptr<ToggleButtonProperty> speech_button); - const ToggleButtonProperty* speech_button() const { - return speech_button_.get(); - } - - // Sets the speech recognition button state. - void SetSpeechRecognitionButtonState(bool toggled); + void SetSpeechRecognitionButton(scoped_ptr<ButtonProperty> speech_button); + const ButtonProperty* speech_button() const { return speech_button_.get(); } // Sets/gets the hint text to display when there is in input. void SetHintText(const base::string16& hint_text); @@ -73,7 +62,7 @@ class APP_LIST_EXPORT SearchBoxModel { private: gfx::ImageSkia icon_; - scoped_ptr<ToggleButtonProperty> speech_button_; + scoped_ptr<ButtonProperty> speech_button_; base::string16 hint_text_; gfx::SelectionModel selection_model_; base::string16 text_; diff --git a/ui/app_list/search_box_model_observer.h b/ui/app_list/search_box_model_observer.h index 189d4521b9..a903dbc03c 100644 --- a/ui/app_list/search_box_model_observer.h +++ b/ui/app_list/search_box_model_observer.h @@ -18,9 +18,6 @@ class APP_LIST_EXPORT SearchBoxModelObserver { // changed. virtual void SpeechRecognitionButtonPropChanged() = 0; - // Invoked when the speech recognition button state is changed. - virtual void SetSpeechRecognitionButtonState(bool toggled) = 0; - // Invoked when hint text is changed. virtual void HintTextChanged() = 0; diff --git a/ui/app_list/speech_ui_model.cc b/ui/app_list/speech_ui_model.cc new file mode 100644 index 0000000000..8695551193 --- /dev/null +++ b/ui/app_list/speech_ui_model.cc @@ -0,0 +1,54 @@ +// Copyright 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. + +#include "ui/app_list/speech_ui_model.h" + +namespace app_list { + +SpeechUIModel::SpeechUIModel() {} + +SpeechUIModel::~SpeechUIModel() {} + +void SpeechUIModel::SetSpeechResult(const base::string16& result, + bool is_final) { + if (result_ == result && is_final_ == is_final) + return; + + result_ = result; + is_final_ = is_final; + FOR_EACH_OBSERVER(SpeechUIModelObserver, + observers_, + OnSpeechResult(result, is_final)); +} + +void SpeechUIModel::UpdateSoundLevel(int16 level) { + if (sound_level_ == level) + return; + + sound_level_ = level; + FOR_EACH_OBSERVER(SpeechUIModelObserver, + observers_, + OnSpeechSoundLevelChanged(level)); +} + +void SpeechUIModel::SetSpeechRecognitionState( + SpeechRecognitionState new_state) { + if (state_ == new_state) + return; + + state_ = new_state; + FOR_EACH_OBSERVER(SpeechUIModelObserver, + observers_, + OnSpeechRecognitionStateChanged(new_state)); +} + +void SpeechUIModel::AddObserver(SpeechUIModelObserver* observer) { + observers_.AddObserver(observer); +} + +void SpeechUIModel::RemoveObserver(SpeechUIModelObserver* observer) { + observers_.RemoveObserver(observer); +} + +} // namespace app_list diff --git a/ui/app_list/speech_ui_model.h b/ui/app_list/speech_ui_model.h new file mode 100644 index 0000000000..1d3f7502cf --- /dev/null +++ b/ui/app_list/speech_ui_model.h @@ -0,0 +1,47 @@ +// Copyright 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. + +#ifndef UI_APP_LIST_SPEECH_UI_MODEL_H_ +#define UI_APP_LIST_SPEECH_UI_MODEL_H_ + +#include "base/basictypes.h" +#include "base/observer_list.h" +#include "base/strings/string16.h" +#include "ui/app_list/app_list_export.h" +#include "ui/app_list/speech_ui_model_observer.h" + +namespace app_list { + +// SpeechUIModel provides the interface to update the UI for speech recognition. +class APP_LIST_EXPORT SpeechUIModel { + public: + SpeechUIModel(); + virtual ~SpeechUIModel(); + + void SetSpeechResult(const base::string16& result, bool is_final); + void UpdateSoundLevel(int16 level); + void SetSpeechRecognitionState(SpeechRecognitionState new_state); + + void AddObserver(SpeechUIModelObserver* observer); + void RemoveObserver(SpeechUIModelObserver* observer); + + const base::string16& result() const { return result_; } + bool is_final() const { return is_final_; } + int16 sound_level() const { return sound_level_; } + SpeechRecognitionState state() const { return state_; } + + private: + base::string16 result_; + bool is_final_; + int16 sound_level_; + SpeechRecognitionState state_; + + ObserverList<SpeechUIModelObserver> observers_; + + DISALLOW_COPY_AND_ASSIGN(SpeechUIModel); +}; + +} // namespace app_list + +#endif // UI_APP_LIST_SPEECH_UI_MODEL_H_ diff --git a/ui/app_list/speech_ui_model_observer.h b/ui/app_list/speech_ui_model_observer.h new file mode 100644 index 0000000000..39fdd26920 --- /dev/null +++ b/ui/app_list/speech_ui_model_observer.h @@ -0,0 +1,39 @@ +// Copyright 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. + +#ifndef UI_APP_LIST_SPEECH_UI_MODEL_OBSERVER_H_ +#define UI_APP_LIST_SPEECH_UI_MODEL_OBSERVER_H_ + +#include "base/basictypes.h" +#include "base/strings/string16.h" +#include "ui/app_list/app_list_export.h" + +namespace app_list { + +enum SpeechRecognitionState { + SPEECH_RECOGNITION_NOT_STARTED = 0, + SPEECH_RECOGNITION_ON, + SPEECH_RECOGNITION_IN_SPEECH, +}; + +class APP_LIST_EXPORT SpeechUIModelObserver { + public: + // Invoked when sound level for the speech recognition has changed. + virtual void OnSpeechSoundLevelChanged(int16 level) {} + + // Invoked when a speech result arrives. |is_final| is true only when the + // speech result is final. + virtual void OnSpeechResult(const base::string16& result, bool is_final) {} + + // Invoked when the state of speech recognition is changed. + virtual void OnSpeechRecognitionStateChanged( + SpeechRecognitionState new_state) {} + + protected: + virtual ~SpeechUIModelObserver() {} +}; + +} // namespace app_list + +#endif // UI_APP_LIST_SPEECH_UI_MODEL_OBSERVER_H_ diff --git a/ui/app_list/test/app_list_test_model.cc b/ui/app_list/test/app_list_test_model.cc index c9ca1c1c2f..0649168fe8 100644 --- a/ui/app_list/test/app_list_test_model.cc +++ b/ui/app_list/test/app_list_test_model.cc @@ -37,7 +37,6 @@ class AppListTestModel::AppListTestItemModel : public AppListItemModel { AppListTestModel::AppListTestModel() : activate_count_(0), last_activated_(NULL) { - SetSignedIn(true); } std::string AppListTestModel::GetItemName(int id) { diff --git a/ui/app_list/test/app_list_test_view_delegate.cc b/ui/app_list/test/app_list_test_view_delegate.cc index ba3e79e03e..518c389a1b 100644 --- a/ui/app_list/test/app_list_test_view_delegate.cc +++ b/ui/app_list/test/app_list_test_view_delegate.cc @@ -9,20 +9,62 @@ #include "base/callback.h" #include "base/files/file_path.h" #include "ui/app_list/app_list_model.h" +#include "ui/app_list/app_list_view_delegate_observer.h" +#include "ui/app_list/signin_delegate.h" #include "ui/app_list/test/app_list_test_model.h" #include "ui/gfx/image/image_skia.h" namespace app_list { namespace test { +class TestSigninDelegate : public SigninDelegate { + public: + TestSigninDelegate() : signed_in_(true) {} + + void set_signed_in(bool signed_in) { signed_in_ = signed_in; } + + // SigninDelegate overrides: + virtual bool NeedSignin() OVERRIDE { return !signed_in_; } + virtual void ShowSignin() OVERRIDE {} + virtual void OpenLearnMore() OVERRIDE {} + virtual void OpenSettings() OVERRIDE {} + + virtual base::string16 GetSigninHeading() OVERRIDE { + return base::string16(); + } + virtual base::string16 GetSigninText() OVERRIDE { return base::string16(); } + virtual base::string16 GetSigninButtonText() OVERRIDE { + return base::string16(); + } + virtual base::string16 GetLearnMoreLinkText() OVERRIDE { + return base::string16(); + } + virtual base::string16 GetSettingsLinkText() OVERRIDE { + return base::string16(); + } + + private: + bool signed_in_; + + DISALLOW_COPY_AND_ASSIGN(TestSigninDelegate); +}; + AppListTestViewDelegate::AppListTestViewDelegate() : dismiss_count_(0), - test_signin_delegate_(NULL), + open_search_result_count_(0), + test_signin_delegate_(new TestSigninDelegate), model_(new AppListTestModel) { } AppListTestViewDelegate::~AppListTestViewDelegate() {} +void AppListTestViewDelegate::SetSignedIn(bool signed_in) { + test_signin_delegate_->set_signed_in(signed_in); + FOR_EACH_OBSERVER(AppListViewDelegateObserver, + observers_, + OnProfilesChanged()); +} + bool AppListTestViewDelegate::ForceNativeDesktop() const { return false; } @@ -32,7 +74,11 @@ AppListModel* AppListTestViewDelegate::GetModel() { } SigninDelegate* AppListTestViewDelegate::GetSigninDelegate() { - return test_signin_delegate_; + return test_signin_delegate_.get(); +} + +SpeechUIModel* AppListTestViewDelegate::GetSpeechUI() { + return &speech_ui_; } void AppListTestViewDelegate::GetShortcutPathForApp( @@ -41,6 +87,11 @@ void AppListTestViewDelegate::GetShortcutPathForApp( callback.Run(base::FilePath()); } +void AppListTestViewDelegate::OpenSearchResult(SearchResult* result, + int event_flags) { + ++open_search_result_count_; +} + void AppListTestViewDelegate::Dismiss() { ++dismiss_count_; } @@ -62,5 +113,15 @@ void AppListTestViewDelegate::ReplaceTestModel(int item_count) { model_->PopulateApps(item_count); } +void AppListTestViewDelegate::AddObserver( + AppListViewDelegateObserver* observer) { + observers_.AddObserver(observer); +} + +void AppListTestViewDelegate::RemoveObserver( + AppListViewDelegateObserver* observer) { + observers_.RemoveObserver(observer); +} + } // namespace test } // namespace app_list diff --git a/ui/app_list/test/app_list_test_view_delegate.h b/ui/app_list/test/app_list_test_view_delegate.h index 49f5ab2bf1..0142398419 100644 --- a/ui/app_list/test/app_list_test_view_delegate.h +++ b/ui/app_list/test/app_list_test_view_delegate.h @@ -10,12 +10,15 @@ #include "base/callback_forward.h" #include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" +#include "base/observer_list.h" #include "ui/app_list/app_list_view_delegate.h" +#include "ui/app_list/speech_ui_model.h" namespace app_list { namespace test { class AppListTestModel; +class TestSigninDelegate; // A concrete AppListViewDelegate for unit tests. class AppListTestViewDelegate : public AppListViewDelegate { @@ -24,26 +27,28 @@ class AppListTestViewDelegate : public AppListViewDelegate { virtual ~AppListTestViewDelegate(); int dismiss_count() { return dismiss_count_; } - void set_test_signin_delegate(SigninDelegate* signin_delegate) { - test_signin_delegate_ = signin_delegate; - } - + int open_search_result_count() { return open_search_result_count_; } void SetUsers(const Users& users) { users_ = users; } + // Sets the signin status of the signin delegate, creating one if there isn't + // one already. + void SetSignedIn(bool signed_in); + // AppListViewDelegate overrides: virtual bool ForceNativeDesktop() const OVERRIDE; virtual void SetProfileByPath(const base::FilePath& profile_path) OVERRIDE {} virtual AppListModel* GetModel() OVERRIDE; virtual SigninDelegate* GetSigninDelegate() OVERRIDE; + virtual SpeechUIModel* GetSpeechUI() OVERRIDE; virtual void GetShortcutPathForApp( const std::string& app_id, const base::Callback<void(const base::FilePath&)>& callback) OVERRIDE; virtual void StartSearch() OVERRIDE {} virtual void StopSearch() OVERRIDE {} virtual void OpenSearchResult(SearchResult* result, - int event_flags) OVERRIDE {} + int event_flags) OVERRIDE; virtual void InvokeSearchResultAction(SearchResult* result, int action_index, int event_flags) OVERRIDE {} @@ -58,17 +63,25 @@ class AppListTestViewDelegate : public AppListViewDelegate { const base::FilePath& profile_path) OVERRIDE {} virtual content::WebContents* GetStartPageContents() OVERRIDE; virtual const Users& GetUsers() const OVERRIDE; + virtual void AddObserver(AppListViewDelegateObserver* observer) OVERRIDE; + virtual void RemoveObserver(AppListViewDelegateObserver* observer) OVERRIDE; // Do a bulk replacement of the items in the model. void ReplaceTestModel(int item_count); + AppListTestModel* ReleaseTestModel() { return model_.release(); } AppListTestModel* GetTestModel() { return model_.get(); } private: int dismiss_count_; + int open_search_result_count_; Users users_; - SigninDelegate* test_signin_delegate_; // Weak. Owned by test. + scoped_ptr<TestSigninDelegate> test_signin_delegate_; scoped_ptr<AppListTestModel> model_; + ObserverList<AppListViewDelegateObserver> observers_; + SpeechUIModel speech_ui_; + + DISALLOW_COPY_AND_ASSIGN(AppListTestViewDelegate); }; } // namespace test diff --git a/ui/app_list/views/app_list_item_view.cc b/ui/app_list/views/app_list_item_view.cc index ccbde55ae3..789687725b 100644 --- a/ui/app_list/views/app_list_item_view.cc +++ b/ui/app_list/views/app_list_item_view.cc @@ -22,6 +22,7 @@ #include "ui/gfx/canvas.h" #include "ui/gfx/font.h" #include "ui/gfx/image/image_skia_operations.h" +#include "ui/gfx/point.h" #include "ui/gfx/transform_util.h" #include "ui/views/controls/image_view.h" #include "ui/views/controls/label.h" @@ -143,16 +144,25 @@ void AppListItemView::SetUIState(UIState state) { ui_state_ = state; #if defined(USE_AURA) - ui::ScopedLayerAnimationSettings settings(layer()->GetAnimator()); switch (ui_state_) { case UI_STATE_NORMAL: title_->SetVisible(!model_->is_installing()); progress_bar_->SetVisible(model_->is_installing()); - layer()->SetTransform(gfx::Transform()); break; - case UI_STATE_DRAGGING: { + case UI_STATE_DRAGGING: title_->SetVisible(false); progress_bar_->SetVisible(false); + break; + case UI_STATE_DROPPING_IN_FOLDER: + break; + } +#if !defined(OS_WIN) + ui::ScopedLayerAnimationSettings settings(layer()->GetAnimator()); + switch (ui_state_) { + case UI_STATE_NORMAL: + layer()->SetTransform(gfx::Transform()); + break; + case UI_STATE_DRAGGING: { const gfx::Rect bounds(layer()->bounds().size()); layer()->SetTransform(gfx::GetScaleTransform( bounds.CenterPoint(), @@ -164,7 +174,8 @@ void AppListItemView::SetUIState(UIState state) { } SchedulePaint(); -#endif +#endif // !OS_WIN +#endif // USE_AURA } void AppListItemView::SetTouchDragging(bool touch_dragging) { @@ -198,6 +209,11 @@ void AppListItemView::OnDragEnded() { SetUIState(UI_STATE_NORMAL); } +gfx::Point AppListItemView::GetDragImageOffset() { + gfx::Point image = icon_->GetImageBounds().origin(); + return gfx::Point(icon_->x() + image.x(), icon_->y() + image.y()); +} + void AppListItemView::SetAsAttemptedFolderTarget(bool is_target_folder) { if (is_target_folder) SetUIState(UI_STATE_DROPPING_IN_FOLDER); @@ -442,4 +458,8 @@ void AppListItemView::OnGestureEvent(ui::GestureEvent* event) { CustomButton::OnGestureEvent(event); } +void AppListItemView::OnSyncDragEnd() { + SetUIState(UI_STATE_NORMAL); +} + } // namespace app_list diff --git a/ui/app_list/views/app_list_item_view.h b/ui/app_list/views/app_list_item_view.h index 4ed02e6011..2d41461578 100644 --- a/ui/app_list/views/app_list_item_view.h +++ b/ui/app_list/views/app_list_item_view.h @@ -49,6 +49,7 @@ class APP_LIST_EXPORT AppListItemView : public views::CustomButton, gfx::ImageSkia GetDragImage(); void OnDragEnded(); + gfx::Point GetDragImageOffset(); void SetAsAttemptedFolderTarget(bool is_target_folder); @@ -56,6 +57,10 @@ class APP_LIST_EXPORT AppListItemView : public views::CustomButton, const views::Label* title() const { return title_; } + // In a synchronous drag the item view isn't informed directly of the drag + // ending, so the runner of the drag should call this. + void OnSyncDragEnd(); + private: enum UIState { UI_STATE_NORMAL, // Normal UI (icon + label) diff --git a/ui/app_list/views/app_list_main_view.cc b/ui/app_list/views/app_list_main_view.cc index a4cd7a9be2..e6f7a7c8a5 100644 --- a/ui/app_list/views/app_list_main_view.cc +++ b/ui/app_list/views/app_list_main_view.cc @@ -81,26 +81,30 @@ AppListMainView::AppListMainView(AppListViewDelegate* delegate, PaginationModel* pagination_model, gfx::NativeView parent) : delegate_(delegate), + pagination_model_(pagination_model), model_(delegate->GetModel()), search_box_view_(NULL), contents_view_(NULL), weak_ptr_factory_(this) { // Starts icon loading early. - PreloadIcons(pagination_model, parent); + PreloadIcons(parent); SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, kInnerPadding, kInnerPadding, kInnerPadding)); - search_box_view_ = new SearchBoxView(this, delegate, model_); + search_box_view_ = new SearchBoxView(this, delegate); AddChildView(search_box_view_); + AddContentsView(); +} +void AppListMainView::AddContentsView() { contents_view_ = new ContentsView(this, - pagination_model, + pagination_model_, model_, - delegate ? delegate->GetStartPageContents() : NULL); + delegate_ ? delegate_->GetStartPageContents() : NULL); AddChildView(contents_view_); search_box_view_->set_contents_view(contents_view_); @@ -141,13 +145,23 @@ void AppListMainView::Prerender() { contents_view_->Prerender(); } +void AppListMainView::ModelChanged() { + pending_icon_loaders_.clear(); + model_ = delegate_->GetModel(); + search_box_view_->ModelChanged(); + delete contents_view_; + contents_view_ = NULL; + pagination_model_->SelectPage(0, false /* animate */); + AddContentsView(); + Layout(); +} + void AppListMainView::SetDragAndDropHostOfCurrentAppList( ApplicationDragAndDropHost* drag_and_drop_host) { contents_view_->SetDragAndDropHostOfCurrentAppList(drag_and_drop_host); } -void AppListMainView::PreloadIcons(PaginationModel* pagination_model, - gfx::NativeView parent) { +void AppListMainView::PreloadIcons(gfx::NativeView parent) { ui::ScaleFactor scale_factor = ui::SCALE_FACTOR_100P; if (parent) scale_factor = ui::GetScaleFactorForNativeView(parent); @@ -155,7 +169,7 @@ void AppListMainView::PreloadIcons(PaginationModel* pagination_model, float scale = ui::GetImageScale(scale_factor); // |pagination_model| could have -1 as the initial selected page and // assumes first page (i.e. index 0) will be used in this case. - const int selected_page = std::max(0, pagination_model->selected_page()); + const int selected_page = std::max(0, pagination_model_->selected_page()); const int tiles_per_page = kPreferredCols * kPreferredRows; const int start_model_index = selected_page * tiles_per_page; diff --git a/ui/app_list/views/app_list_main_view.h b/ui/app_list/views/app_list_main_view.h index c0de4a0d11..1e119aa0b8 100644 --- a/ui/app_list/views/app_list_main_view.h +++ b/ui/app_list/views/app_list_main_view.h @@ -10,6 +10,7 @@ #include "base/memory/scoped_vector.h" #include "base/memory/weak_ptr.h" #include "base/timer/timer.h" +#include "ui/app_list/app_list_export.h" #include "ui/app_list/views/apps_grid_view_delegate.h" #include "ui/app_list/views/search_box_view_delegate.h" #include "ui/app_list/views/search_result_list_view_delegate.h" @@ -31,10 +32,10 @@ class SearchBoxView; // AppListMainView contains the normal view of the app list, which is shown // when the user is signed in. -class AppListMainView : public views::View, - public AppsGridViewDelegate, - public SearchBoxViewDelegate, - public SearchResultListViewDelegate { +class APP_LIST_EXPORT AppListMainView : public views::View, + public AppsGridViewDelegate, + public SearchBoxViewDelegate, + public SearchResultListViewDelegate { public: // Takes ownership of |delegate|. explicit AppListMainView(AppListViewDelegate* delegate, @@ -48,6 +49,8 @@ class AppListMainView : public views::View, void Prerender(); + void ModelChanged(); + SearchBoxView* search_box_view() const { return search_box_view_; } // If |drag_and_drop_host| is not NULL it will be called upon drag and drop @@ -60,10 +63,11 @@ class AppListMainView : public views::View, private: class IconLoader; - // Loads icon image for the apps in the selected page of |pagination_model|. + void AddContentsView(); + + // Loads icon image for the apps in the selected page of |pagination_model_|. // |parent| is used to determine the image scale factor to use. - void PreloadIcons(PaginationModel* pagination_model, - gfx::NativeView parent); + void PreloadIcons(gfx::NativeView parent); // Invoked when |icon_loading_wait_timer_| fires. void OnIconLoadingWaitTimer(); @@ -89,7 +93,8 @@ class AppListMainView : public views::View, virtual void OnResultInstalled(SearchResult* result) OVERRIDE; virtual void OnResultUninstalled(SearchResult* result) OVERRIDE; - AppListViewDelegate* delegate_; // Owned by parent (AppListView) + AppListViewDelegate* delegate_; // Owned by parent view (AppListView). + PaginationModel* pagination_model_; // Owned by AppListController. AppListModel* model_; // Unowned; ownership is handled by |delegate_|. SearchBoxView* search_box_view_; // Owned by views hierarchy. diff --git a/ui/app_list/views/app_list_main_view_unittest.cc b/ui/app_list/views/app_list_main_view_unittest.cc new file mode 100644 index 0000000000..6ca1820ef4 --- /dev/null +++ b/ui/app_list/views/app_list_main_view_unittest.cc @@ -0,0 +1,90 @@ +// Copyright 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. + +#include "ui/app_list/views/app_list_main_view.h" + +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/app_list/pagination_model.h" +#include "ui/app_list/test/app_list_test_model.h" +#include "ui/app_list/test/app_list_test_view_delegate.h" +#include "ui/app_list/views/apps_container_view.h" +#include "ui/app_list/views/apps_grid_view.h" +#include "ui/app_list/views/contents_view.h" +#include "ui/views/test/views_test_base.h" +#include "ui/views/view_model.h" +#include "ui/views/widget/widget.h" + +namespace app_list { +namespace test { + +namespace { + +const int kInitialItems = 2; + +class AppListMainViewTest : public views::ViewsTestBase { + public: + AppListMainViewTest() + : widget_(NULL), + main_view_(NULL) {} + + virtual ~AppListMainViewTest() {} + + // testing::Test overrides: + virtual void SetUp() OVERRIDE { + views::ViewsTestBase::SetUp(); + delegate_.reset(new AppListTestViewDelegate); + delegate_->GetTestModel()->PopulateApps(kInitialItems); + + main_view_ = + new AppListMainView(delegate_.get(), &pagination_model_, GetContext()); + main_view_->SetPaintToLayer(true); + + widget_ = new views::Widget; + views::Widget::InitParams params = + CreateParams(views::Widget::InitParams::TYPE_POPUP); + params.bounds.set_size(main_view_->GetPreferredSize()); + widget_->Init(params); + + widget_->SetContentsView(main_view_); + } + + virtual void TearDown() OVERRIDE { + widget_->Close(); + views::ViewsTestBase::TearDown(); + delegate_.reset(); + } + + const views::ViewModel* ViewModel() { + return main_view_->contents_view()->apps_container_view()->apps_grid_view() + ->view_model_for_test(); + } + + protected: + views::Widget* widget_; // Owned by native window. + AppListMainView* main_view_; // Owned by |widget_|. + PaginationModel pagination_model_; + scoped_ptr<AppListTestViewDelegate> delegate_; + + private: + DISALLOW_COPY_AND_ASSIGN(AppListMainViewTest); +}; + +} // namespace + +// Tests changing the AppListModel when switching profiles. +TEST_F(AppListMainViewTest, ModelChanged) { + EXPECT_EQ(kInitialItems, ViewModel()->view_size()); + + // The model is owned by a profile keyed service, which is never destroyed + // until after profile switching. + scoped_ptr<AppListModel> old_model(delegate_->ReleaseTestModel()); + + const int kReplacementItems = 5; + delegate_->ReplaceTestModel(kReplacementItems); + main_view_->ModelChanged(); + EXPECT_EQ(kReplacementItems, ViewModel()->view_size()); +} + +} // namespace test +} // namespace app_list diff --git a/ui/app_list/views/app_list_view.cc b/ui/app_list/views/app_list_view.cc index d4c9ac1969..fc15fc58d2 100644 --- a/ui/app_list/views/app_list_view.cc +++ b/ui/app_list/views/app_list_view.cc @@ -11,11 +11,16 @@ #include "ui/app_list/app_list_view_delegate.h" #include "ui/app_list/pagination_model.h" #include "ui/app_list/signin_delegate.h" +#include "ui/app_list/speech_ui_model.h" #include "ui/app_list/views/app_list_background.h" #include "ui/app_list/views/app_list_main_view.h" +#include "ui/app_list/views/app_list_view_observer.h" #include "ui/app_list/views/search_box_view.h" #include "ui/app_list/views/signin_view.h" +#include "ui/app_list/views/speech_view.h" #include "ui/base/ui_base_switches.h" +#include "ui/compositor/layer.h" +#include "ui/compositor/scoped_layer_animation_settings.h" #include "ui/gfx/image/image_skia.h" #include "ui/gfx/insets.h" #include "ui/gfx/path.h" @@ -42,6 +47,12 @@ namespace { void (*g_next_paint_callback)(); +// The margin from the edge to the speech UI. +const int kSpeechUIMargin = 12; + +// The vertical position for the appearing animation of the speech UI. +const float kSpeechUIApearingPosition =12; + // The distance between the arrow tip and edge of the anchor view. const int kArrowOffset = 10; @@ -68,19 +79,56 @@ bool SupportsShadow() { } // namespace +// An animation observer to hide the view at the end of the animation. +class HideViewAnimationObserver : public ui::ImplicitAnimationObserver { + public: + HideViewAnimationObserver() : target_(NULL) { + } + + virtual ~HideViewAnimationObserver() { + if (target_) + StopObservingImplicitAnimations(); + } + + void SetTarget(views::View* target) { + if (!target_) + StopObservingImplicitAnimations(); + target_ = target; + } + + private: + // Overridden from ui::ImplicitAnimationObserver: + virtual void OnImplicitAnimationsCompleted() OVERRIDE { + if (target_) { + target_->SetVisible(false); + target_ = NULL; + } + } + + views::View* target_; + + DISALLOW_COPY_AND_ASSIGN(HideViewAnimationObserver); +}; + //////////////////////////////////////////////////////////////////////////////// // AppListView: AppListView::AppListView(AppListViewDelegate* delegate) : delegate_(delegate), app_list_main_view_(NULL), - signin_view_(NULL) { + signin_view_(NULL), + speech_view_(NULL), + animation_observer_(new HideViewAnimationObserver()) { CHECK(delegate); - delegate_->GetModel()->AddObserver(this); + + delegate_->AddObserver(this); + delegate_->GetSpeechUI()->AddObserver(this); } AppListView::~AppListView() { - delegate_->GetModel()->RemoveObserver(this); + delegate_->GetSpeechUI()->RemoveObserver(this); + delegate_->RemoveObserver(this); + animation_observer_.reset(); // Remove child views first to ensure no remaining dependencies on delegate_. RemoveAllChildViews(true); } @@ -157,22 +205,26 @@ void AppListView::Prerender() { app_list_main_view_->Prerender(); } -void AppListView::OnSigninStatusChanged() { - AppListModel* model = delegate_->GetModel(); - signin_view_->SetVisible(!model->signed_in()); - app_list_main_view_->SetVisible(model->signed_in()); +void AppListView::OnProfilesChanged() { + SigninDelegate* signin_delegate = + delegate_ ? delegate_->GetSigninDelegate() : NULL; + bool show_signin_view = signin_delegate && signin_delegate->NeedSignin(); + + signin_view_->SetVisible(show_signin_view); + app_list_main_view_->SetVisible(!show_signin_view); app_list_main_view_->search_box_view()->InvalidateMenu(); } void AppListView::SetProfileByPath(const base::FilePath& profile_path) { delegate_->SetProfileByPath(profile_path); + app_list_main_view_->ModelChanged(); } -void AppListView::AddObserver(Observer* observer) { +void AppListView::AddObserver(AppListViewObserver* observer) { observers_.AddObserver(observer); } -void AppListView::RemoveObserver(Observer* observer) { +void AppListView::RemoveObserver(AppListViewObserver* observer) { observers_.RemoveObserver(observer); } @@ -213,7 +265,19 @@ void AppListView::InitAsBubbleInternal(gfx::NativeView parent, app_list_main_view_->GetPreferredSize().width()); AddChildView(signin_view_); - OnSigninStatusChanged(); + // Speech recognition is available only when the start page exists. + if (delegate_ && delegate_->GetStartPageContents()) { + speech_view_ = new SpeechView(delegate_.get()); + speech_view_->SetVisible(false); +#if defined(USE_AURA) + speech_view_->SetPaintToLayer(true); + speech_view_->SetFillsBoundsOpaquely(false); + speech_view_->layer()->SetOpacity(0.0f); +#endif + AddChildView(speech_view_); + } + + OnProfilesChanged(); set_color(kContentsBackgroundColor); set_margins(gfx::Insets()); set_move_with_anchor(true); @@ -304,6 +368,16 @@ void AppListView::Layout() { const gfx::Rect contents_bounds = GetContentsBounds(); app_list_main_view_->SetBoundsRect(contents_bounds); signin_view_->SetBoundsRect(contents_bounds); + + if (speech_view_) { + gfx::Rect speech_bounds = contents_bounds; + int preferred_height = speech_view_->GetPreferredSize().height(); + speech_bounds.Inset(kSpeechUIMargin, kSpeechUIMargin); + speech_bounds.set_height(std::min(speech_bounds.height(), + preferred_height)); + speech_bounds.Inset(-speech_view_->GetInsets()); + speech_view_->SetBoundsRect(speech_bounds); + } } void AppListView::OnWidgetDestroying(views::Widget* widget) { @@ -317,7 +391,7 @@ void AppListView::OnWidgetActivationChanged(views::Widget* widget, // Do not called inherited function as the bubble delegate auto close // functionality is not used. if (widget == GetWidget()) - FOR_EACH_OBSERVER(Observer, observers_, + FOR_EACH_OBSERVER(AppListViewObserver, observers_, OnActivationChanged(widget, active)); } @@ -338,8 +412,61 @@ void AppListView::OnWidgetVisibilityChanged(views::Widget* widget, Layout(); } -void AppListView::OnAppListModelSigninStatusChanged() { - OnSigninStatusChanged(); +void AppListView::OnSpeechRecognitionStateChanged( + SpeechRecognitionState new_state) { + DCHECK(!signin_view_->visible()); + + bool recognizing = new_state != SPEECH_RECOGNITION_NOT_STARTED; + // No change for this class. + if (speech_view_->visible() == recognizing) + return; + + if (recognizing) + speech_view_->Reset(); + +#if defined(USE_AURA) + gfx::Transform speech_transform; + speech_transform.Translate( + 0, SkFloatToMScalar(kSpeechUIApearingPosition)); + if (recognizing) + speech_view_->layer()->SetTransform(speech_transform); + + { + ui::ScopedLayerAnimationSettings main_settings( + app_list_main_view_->layer()->GetAnimator()); + if (recognizing) { + animation_observer_->SetTarget(app_list_main_view_); + main_settings.AddObserver(animation_observer_.get()); + } + app_list_main_view_->layer()->SetOpacity(recognizing ? 0.0f : 1.0f); + } + + { + ui::ScopedLayerAnimationSettings speech_settings( + speech_view_->layer()->GetAnimator()); + if (!recognizing) { + animation_observer_->SetTarget(speech_view_); + speech_settings.AddObserver(animation_observer_.get()); + } + + speech_view_->layer()->SetOpacity(recognizing ? 1.0f : 0.0f); + if (recognizing) + speech_view_->layer()->SetTransform(gfx::Transform()); + else + speech_view_->layer()->SetTransform(speech_transform); + } + + if (recognizing) + speech_view_->SetVisible(true); + else + app_list_main_view_->SetVisible(true); +#else + speech_view_->SetVisible(recognizing); + app_list_main_view_->SetVisible(!recognizing); +#endif + + // Needs to schedule paint of AppListView itself, to repaint the background. + SchedulePaint(); } } // namespace app_list diff --git a/ui/app_list/views/app_list_view.h b/ui/app_list/views/app_list_view.h index 2d273ceeee..fb03c2dd84 100644 --- a/ui/app_list/views/app_list_view.h +++ b/ui/app_list/views/app_list_view.h @@ -8,35 +8,33 @@ #include "base/memory/scoped_ptr.h" #include "base/observer_list.h" #include "ui/app_list/app_list_export.h" -#include "ui/app_list/app_list_model_observer.h" +#include "ui/app_list/app_list_view_delegate_observer.h" +#include "ui/app_list/speech_ui_model_observer.h" #include "ui/views/bubble/bubble_delegate.h" +#include "ui/views/widget/widget.h" namespace base { class FilePath; } -namespace views { -class Widget; -} - namespace app_list { class ApplicationDragAndDropHost; class AppListMainView; class AppListModel; class AppListViewDelegate; +class AppListViewObserver; +class HideViewAnimationObserver; class PaginationModel; class SigninDelegate; class SigninView; +class SpeechView; // AppListView is the top-level view and controller of app list UI. It creates // and hosts a AppsGridView and passes AppListModel to it for display. class APP_LIST_EXPORT AppListView : public views::BubbleDelegateView, - public AppListModelObserver { + public AppListViewDelegateObserver, + public SpeechUIModelObserver { public: - class Observer { - public: - virtual void OnActivationChanged(views::Widget* widget, bool active) = 0; - }; // Takes ownership of |delegate|. explicit AppListView(AppListViewDelegate* delegate); @@ -85,15 +83,15 @@ class APP_LIST_EXPORT AppListView : public views::BubbleDelegateView, // WidgetDelegate overrides: virtual bool ShouldHandleSystemCommands() const OVERRIDE; - void Prerender(); + // Overridden from AppListViewDelegateObserver: + virtual void OnProfilesChanged() OVERRIDE; - // Invoked when the sign-in status is changed to switch on/off sign-in view. - void OnSigninStatusChanged(); + void Prerender(); void SetProfileByPath(const base::FilePath& profile_path); - void AddObserver(Observer* observer); - void RemoveObserver(Observer* observer); + void AddObserver(AppListViewObserver* observer); + void RemoveObserver(AppListViewObserver* observer); // Set a callback to be called the next time any app list paints. static void SetNextPaintCallback(void (*callback)()); @@ -133,8 +131,9 @@ class APP_LIST_EXPORT AppListView : public views::BubbleDelegateView, virtual void OnWidgetActivationChanged( views::Widget* widget, bool active) OVERRIDE; - // Overridden from AppListModelObserver: - virtual void OnAppListModelSigninStatusChanged() OVERRIDE; + // Overridden from SpeechUIModelObserver: + virtual void OnSpeechRecognitionStateChanged( + SpeechRecognitionState new_state) OVERRIDE; SigninDelegate* GetSigninDelegate(); @@ -142,8 +141,10 @@ class APP_LIST_EXPORT AppListView : public views::BubbleDelegateView, AppListMainView* app_list_main_view_; SigninView* signin_view_; + SpeechView* speech_view_; - ObserverList<Observer> observers_; + ObserverList<AppListViewObserver> observers_; + scoped_ptr<HideViewAnimationObserver> animation_observer_; DISALLOW_COPY_AND_ASSIGN(AppListView); }; diff --git a/ui/app_list/views/app_list_view_observer.h b/ui/app_list/views/app_list_view_observer.h new file mode 100644 index 0000000000..f9fb61c819 --- /dev/null +++ b/ui/app_list/views/app_list_view_observer.h @@ -0,0 +1,24 @@ +// Copyright 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. + +#ifndef UI_APP_LIST_VIEWS_APP_LIST_VIEW_OBSERVER_H_ +#define UI_APP_LIST_VIEWS_APP_LIST_VIEW_OBSERVER_H_ + +namespace views { +class Widget; +} + +namespace app_list { + +class AppListViewObserver { + public: + virtual void OnActivationChanged(views::Widget* widget, bool active) = 0; + + protected: + virtual ~AppListViewObserver() {} +}; + +} // namespace app_list + +#endif // UI_APP_LIST_VIEWS_APP_LIST_VIEW_OBSERVER_H_ diff --git a/ui/app_list/views/apps_grid_view.cc b/ui/app_list/views/apps_grid_view.cc index a2cba7d836..3c486ca154 100644 --- a/ui/app_list/views/apps_grid_view.cc +++ b/ui/app_list/views/apps_grid_view.cc @@ -31,9 +31,12 @@ #if defined(USE_AURA) #include "ui/aura/root_window.h" #include "ui/aura/window.h" -#endif +#if defined(OS_WIN) +#include "ui/views/win/hwnd_util.h" +#endif // defined(OS_WIN) +#endif // defined(USE_AURA) -#if defined(OS_WIN) && !defined(USE_AURA) +#if defined(OS_WIN) #include "base/command_line.h" #include "base/files/file_path.h" #include "base/win/shortcut.h" @@ -213,7 +216,7 @@ size_t MergeItems(AppListItemList* item_list, } // namespace -#if defined(OS_WIN) && !defined(USE_AURA) +#if defined(OS_WIN) // Interprets drag events sent from Windows via the drag/drop API and forwards // them to AppsGridView. // On Windows, in order to have the OS perform the drag properly we need to @@ -263,6 +266,7 @@ class SynchronousDrag : public ui::DragSourceWin { // Restore the dragged view to its original size. drag_view_->SetSize(drag_view_size); + drag_view_->OnSyncDragEnd(); grid_view_->EndDrag(canceled_ || !IsCursorWithinGridView()); } @@ -287,12 +291,12 @@ class SynchronousDrag : public ui::DragSourceWin { drag_utils::SetDragImageOnDataObject( image, image.size(), - gfx::Vector2d(drag_view_offset_.x(), drag_view_offset_.y()), + drag_view_offset_ - drag_view_->GetDragImageOffset(), data); } HWND GetGridViewHWND() { - return grid_view_->GetWidget()->GetTopLevelWidget()->GetNativeView(); + return views::HWNDForView(grid_view_); } bool IsCursorWithinGridView() { @@ -320,7 +324,7 @@ class SynchronousDrag : public ui::DragSourceWin { DISALLOW_COPY_AND_ASSIGN(SynchronousDrag); }; -#endif // defined(OS_WIN) && !defined(USE_AURA) +#endif // defined(OS_WIN) AppsGridView::AppsGridView(AppsGridViewDelegate* delegate, PaginationModel* pagination_model, @@ -460,7 +464,7 @@ void AppsGridView::InitiateDrag(AppListItemView* view, } void AppsGridView::OnGotShortcutPath(const base::FilePath& path) { -#if defined(OS_WIN) && !defined(USE_AURA) +#if defined(OS_WIN) // Drag may have ended before we get the shortcut path. if (!synchronous_drag_) return; @@ -474,10 +478,15 @@ void AppsGridView::OnGotShortcutPath(const base::FilePath& path) { } void AppsGridView::StartSettingUpSynchronousDrag() { -#if defined(OS_WIN) && !defined(USE_AURA) +#if defined(OS_WIN) if (!delegate_) return; + // Favor the drag and drop host over native win32 drag. For the Win8/ash + // launcher we want to have ashes drag and drop over win32's. + if (drag_and_drop_host_) + return; + delegate_->GetShortcutPathForApp( drag_view_->model()->id(), base::Bind(&AppsGridView::OnGotShortcutPath, base::Unretained(this))); @@ -486,7 +495,7 @@ void AppsGridView::StartSettingUpSynchronousDrag() { } bool AppsGridView::RunSynchronousDrag() { -#if defined(OS_WIN) && !defined(USE_AURA) +#if defined(OS_WIN) if (synchronous_drag_ && synchronous_drag_->CanRun()) { synchronous_drag_->Run(); synchronous_drag_ = NULL; @@ -497,13 +506,16 @@ bool AppsGridView::RunSynchronousDrag() { } void AppsGridView::CleanUpSynchronousDrag() { -#if defined(OS_WIN) && !defined(USE_AURA) +#if defined(OS_WIN) synchronous_drag_ = NULL; #endif } void AppsGridView::UpdateDragFromItem(Pointer pointer, const ui::LocatedEvent& event) { + // EndDrag was called before if |drag_view_| is NULL. + if (!drag_view_) + return; gfx::Point drag_point_in_grid_view; ExtractDragLocation(event, &drag_point_in_grid_view); UpdateDrag(pointer, drag_point_in_grid_view); @@ -1097,7 +1109,7 @@ void AppsGridView::AnimationBetweenRows(views::View* view, void AppsGridView::ExtractDragLocation(const ui::LocatedEvent& event, gfx::Point* drag_point) { -#if defined(USE_AURA) +#if defined(USE_AURA) && !defined(OS_WIN) // Use root location of |event| instead of location in |drag_view_|'s // coordinates because |drag_view_| has a scale transform and location // could have integer round error and causes jitter. diff --git a/ui/app_list/views/apps_grid_view.h b/ui/app_list/views/apps_grid_view.h index 2ff51fad8e..043f6facb3 100644 --- a/ui/app_list/views/apps_grid_view.h +++ b/ui/app_list/views/apps_grid_view.h @@ -20,7 +20,7 @@ #include "ui/views/view.h" #include "ui/views/view_model.h" -#if defined(OS_WIN) && !defined(USE_AURA) +#if defined(OS_WIN) #include "ui/base/dragdrop/drag_source_win.h" #endif @@ -36,7 +36,7 @@ class WebView; namespace app_list { -#if defined(OS_WIN) && !defined(USE_AURA) +#if defined(OS_WIN) class SynchronousDrag; #endif @@ -371,7 +371,7 @@ class APP_LIST_EXPORT AppsGridView : public views::View, // Page the drag started on. int drag_start_page_; -#if defined(OS_WIN) && !defined(USE_AURA) +#if defined(OS_WIN) // Created when a drag is started (ie: drag exceeds the drag threshold), but // not Run() until supplied with a shortcut path. scoped_refptr<SynchronousDrag> synchronous_drag_; diff --git a/ui/app_list/views/folder_header_view.cc b/ui/app_list/views/folder_header_view.cc index 3c21813700..9699e8febf 100644 --- a/ui/app_list/views/folder_header_view.cc +++ b/ui/app_list/views/folder_header_view.cc @@ -12,8 +12,10 @@ #include "ui/app_list/views/app_list_folder_view.h" #include "ui/base/resource/resource_bundle.h" #include "ui/gfx/canvas.h" +#include "ui/views/border.h" #include "ui/views/controls/button/image_button.h" #include "ui/views/controls/textfield/textfield.h" +#include "ui/views/painter.h" namespace app_list { @@ -36,6 +38,10 @@ class FolderHeaderView::FolderNameView : public views::Textfield { public: FolderNameView() { set_border(views::Border::CreateEmptyBorder(1, 1, 1, 1)); + const SkColor kFocusBorderColor = SkColorSetRGB(64, 128, 250); + SetFocusPainter(views::Painter::CreateSolidFocusPainter( + kFocusBorderColor, + gfx::Insets(0, 0, 1, 1))); } virtual ~FolderNameView() { @@ -46,15 +52,6 @@ class FolderHeaderView::FolderNameView : public views::Textfield { return gfx::Size(kFolderNameWidth, kFolderNameHeight); } - virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE { - const SkColor kFocusBorderColor = SkColorSetRGB(64, 128, 250); - if (HasFocus()) { - gfx::Rect rect = GetLocalBounds(); - rect.Inset(0, 0, 1, 1); - canvas->DrawRect(rect, kFocusBorderColor); - } - } - private: DISALLOW_COPY_AND_ASSIGN(FolderNameView); }; diff --git a/ui/app_list/views/page_switcher.h b/ui/app_list/views/page_switcher.h index 7e1ab9dc60..b05da99ee0 100644 --- a/ui/app_list/views/page_switcher.h +++ b/ui/app_list/views/page_switcher.h @@ -50,7 +50,7 @@ class PageSwitcher : public views::View, virtual void TransitionStarted() OVERRIDE; virtual void TransitionChanged() OVERRIDE; - PaginationModel* model_; // Owned by parent AppListView. + PaginationModel* model_; // Owned by AppListController. views::View* buttons_; // Owned by views hierarchy. DISALLOW_COPY_AND_ASSIGN(PageSwitcher); diff --git a/ui/app_list/views/search_box_view.cc b/ui/app_list/views/search_box_view.cc index ba40bf3b5f..c975177777 100644 --- a/ui/app_list/views/search_box_view.cc +++ b/ui/app_list/views/search_box_view.cc @@ -41,16 +41,14 @@ const int kMenuXOffsetFromButton = -7; } // namespace SearchBoxView::SearchBoxView(SearchBoxViewDelegate* delegate, - AppListViewDelegate* view_delegate, - AppListModel* model) + AppListViewDelegate* view_delegate) : delegate_(delegate), view_delegate_(view_delegate), - model_(model), + model_(NULL), icon_view_(new views::ImageView), speech_button_(NULL), search_box_(new views::Textfield), contents_view_(NULL) { - DCHECK(model_); AddChildView(icon_view_); ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); @@ -71,16 +69,25 @@ SearchBoxView::SearchBoxView(SearchBoxViewDelegate* delegate, search_box_->SetController(this); AddChildView(search_box_); - model_->search_box()->AddObserver(this); - IconChanged(); - SpeechRecognitionButtonPropChanged(); - HintTextChanged(); + ModelChanged(); } SearchBoxView::~SearchBoxView() { model_->search_box()->RemoveObserver(this); } +void SearchBoxView::ModelChanged() { + if (model_) + model_->search_box()->RemoveObserver(this); + + model_ = view_delegate_->GetModel(); + DCHECK(model_); + model_->search_box()->AddObserver(this); + IconChanged(); + SpeechRecognitionButtonPropChanged(); + HintTextChanged(); +} + bool SearchBoxView::HasSearch() const { return !search_box_->text().empty(); } @@ -201,19 +208,16 @@ void SearchBoxView::IconChanged() { } void SearchBoxView::SpeechRecognitionButtonPropChanged() { - const SearchBoxModel::ToggleButtonProperty* speech_button_prop = + const SearchBoxModel::ButtonProperty* speech_button_prop = model_->search_box()->speech_button(); if (speech_button_prop) { if (!speech_button_) { - speech_button_ = new views::ToggleImageButton(this); + speech_button_ = new views::ImageButton(this); AddChildView(speech_button_); } speech_button_->SetImage(views::Button::STATE_NORMAL, &speech_button_prop->icon); - speech_button_->SetToggledImage(views::Button::STATE_NORMAL, - &speech_button_prop->toggled_icon); speech_button_->SetTooltipText(speech_button_prop->tooltip); - speech_button_->SetToggledTooltipText(speech_button_prop->toggled_tooltip); } else { if (speech_button_) { // Deleting a view will detach it from its parent. @@ -223,11 +227,6 @@ void SearchBoxView::SpeechRecognitionButtonPropChanged() { } } -void SearchBoxView::SetSpeechRecognitionButtonState(bool toggled) { - if (speech_button_) - speech_button_->SetToggled(toggled); -} - void SearchBoxView::HintTextChanged() { search_box_->set_placeholder_text(model_->search_box()->hint_text()); } diff --git a/ui/app_list/views/search_box_view.h b/ui/app_list/views/search_box_view.h index ad12ede57b..440ffba742 100644 --- a/ui/app_list/views/search_box_view.h +++ b/ui/app_list/views/search_box_view.h @@ -38,10 +38,10 @@ class SearchBoxView : public views::View, public SearchBoxModelObserver { public: SearchBoxView(SearchBoxViewDelegate* delegate, - AppListViewDelegate* view_delegate, - AppListModel* model); + AppListViewDelegate* view_delegate); virtual ~SearchBoxView(); + void ModelChanged(); bool HasSearch() const; void ClearSearch(); void InvalidateMenu(); @@ -81,19 +81,18 @@ class SearchBoxView : public views::View, // Overridden from SearchBoxModelObserver: virtual void IconChanged() OVERRIDE; virtual void SpeechRecognitionButtonPropChanged() OVERRIDE; - virtual void SetSpeechRecognitionButtonState(bool toggled) OVERRIDE; virtual void HintTextChanged() OVERRIDE; virtual void SelectionModelChanged() OVERRIDE; virtual void TextChanged() OVERRIDE; SearchBoxViewDelegate* delegate_; // Not owned. AppListViewDelegate* view_delegate_; // Not owned. - AppListModel* model_; // Owned by AppListView. + AppListModel* model_; // Owned by the profile-keyed service. scoped_ptr<AppListMenuViews> menu_; views::ImageView* icon_view_; // Owned by views hierarchy. - views::ToggleImageButton* speech_button_; // Owned by views hierarchy. + views::ImageButton* speech_button_; // Owned by views hierarchy. views::MenuButton* menu_button_; // Owned by views hierarchy. views::Textfield* search_box_; // Owned by views hierarchy. views::View* contents_view_; // Owned by views hierarchy. diff --git a/ui/app_list/views/speech_view.cc b/ui/app_list/views/speech_view.cc new file mode 100644 index 0000000000..d3c64be9b3 --- /dev/null +++ b/ui/app_list/views/speech_view.cc @@ -0,0 +1,227 @@ +// Copyright 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. + +#include "ui/app_list/views/speech_view.h" + +#include "base/strings/utf_string_conversions.h" +#include "grit/ui_resources.h" +#include "grit/ui_strings.h" +#include "ui/app_list/app_list_model.h" +#include "ui/app_list/app_list_view_delegate.h" +#include "ui/app_list/speech_ui_model.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/base/resource/resource_bundle.h" +#include "ui/gfx/canvas.h" +#include "ui/views/animation/bounds_animator.h" +#include "ui/views/background.h" +#include "ui/views/controls/button/image_button.h" +#include "ui/views/controls/label.h" +#include "ui/views/layout/fill_layout.h" +#include "ui/views/shadow_border.h" + +namespace app_list { + +namespace { + +const int kShadowOffset = 1; +const int kShadowBlur = 4; +const int kSpeechViewMaxHeight = 300; +const int kTextSize = 20; +const int kMicButtonMargin = 12; +const int kTextMargin = 32; +const int kIndicatorRadiusMax = 100; +const int kIndicatorAnimationDuration = 100; +const SkColor kShadowColor = SkColorSetARGB(0.3 * 255, 0, 0, 0); +const SkColor kHintTextColor = SkColorSetRGB(119, 119, 119); +const SkColor kResultTextColor = SkColorSetRGB(178, 178, 178); +const SkColor kSoundLevelIndicatorColor = SkColorSetRGB(219, 219, 219); + +// TODO(mukai): check with multiple devices to make sure these limits. +const int16 kSoundLevelMin = 50; +const int16 kSoundLevelMax = 210; + +class SoundLevelIndicator : public views::View { + public: + SoundLevelIndicator(); + virtual ~SoundLevelIndicator(); + + private: + // Overridden from views::View: + virtual void Paint(gfx::Canvas* canvas) OVERRIDE; + + DISALLOW_COPY_AND_ASSIGN(SoundLevelIndicator); +}; + +SoundLevelIndicator::SoundLevelIndicator() {} + +SoundLevelIndicator::~SoundLevelIndicator() {} + +void SoundLevelIndicator::Paint(gfx::Canvas* canvas) { + SkPaint paint; + paint.setStyle(SkPaint::kFill_Style); + paint.setColor(kSoundLevelIndicatorColor); + canvas->DrawCircle(bounds().CenterPoint(), width() / 2, paint); +} + +// MicButton is an image button with circular hit area. +class MicButton : public views::ImageButton { + public: + explicit MicButton(views::ButtonListener* listener); + virtual ~MicButton(); + + private: + // Overridden from views::View: + virtual bool HitTestRect(const gfx::Rect& rect) const OVERRIDE; + + DISALLOW_COPY_AND_ASSIGN(MicButton); +}; + +MicButton::MicButton(views::ButtonListener* listener) + : views::ImageButton(listener) {} + +MicButton::~MicButton() {} + +bool MicButton::HitTestRect(const gfx::Rect& rect) const { + if (!views::ImageButton::HitTestRect(rect)) + return false; + + gfx::Rect local_bounds = GetLocalBounds(); + int radius = local_bounds.width() / 2; + return (rect.origin() - local_bounds.CenterPoint()).LengthSquared() < + radius * radius; +} + +} // namespace + +// static + +SpeechView::SpeechView(AppListViewDelegate* delegate) + : delegate_(delegate) { + set_border(new views::ShadowBorder( + kShadowBlur, + kShadowColor, + kShadowOffset, // Vertical offset. + 0)); + + // To keep the painting order of the border and the background, this class + // actually has a single child of 'container' which has white background and + // contains all components. + views::View* container = new views::View(); + container->set_background( + views::Background::CreateSolidBackground(SK_ColorWHITE)); + + // TODO(mukai): add Google logo. + indicator_ = new SoundLevelIndicator(); + indicator_->SetVisible(false); + container->AddChildView(indicator_); + + mic_button_ = new MicButton(this); + container->AddChildView(mic_button_); + + // TODO(mukai): use BoundedLabel to cap 2 lines. + speech_result_ = new views::Label(); + speech_result_->SetHorizontalAlignment(gfx::ALIGN_LEFT); + const gfx::FontList& font_list = speech_result_->font_list(); + speech_result_->SetFontList(font_list.DeriveFontListWithSize(kTextSize)); + speech_result_->SetMultiLine(true); + container->AddChildView(speech_result_); + + AddChildView(container); + + delegate_->GetSpeechUI()->AddObserver(this); + indicator_animator_.reset(new views::BoundsAnimator(container)); + indicator_animator_->SetAnimationDuration(kIndicatorAnimationDuration); + indicator_animator_->set_tween_type(gfx::Tween::LINEAR); + + Reset(); +} + +SpeechView::~SpeechView() { + delegate_->GetSpeechUI()->RemoveObserver(this); +} + +void SpeechView::Reset() { + ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); + speech_result_->SetText(l10n_util::GetStringUTF16( + IDS_APP_LIST_SPEECH_HINT_TEXT)); + speech_result_->SetEnabledColor(kHintTextColor); + mic_button_->SetImage(views::Button::STATE_NORMAL, bundle.GetImageSkiaNamed( + IDR_APP_LIST_SPEECH_MIC_ON)); +} + +int SpeechView::GetIndicatorRadius(int16 level) { + level = std::min(std::max(level, kSoundLevelMin), kSoundLevelMax); + int radius_min = mic_button_->width() / 2; + return (level - kSoundLevelMin) * (kIndicatorRadiusMax - radius_min) / + (kSoundLevelMax - kSoundLevelMin) + radius_min; +} + +void SpeechView::Layout() { + views::View* container = child_at(0); + container->SetBoundsRect(GetContentsBounds()); + + // Because container is a pure View, this class should layout its children. + // TODO(mukai): arrange Google logo. + const gfx::Rect contents_bounds = container->GetContentsBounds(); + gfx::Size mic_size = mic_button_->GetPreferredSize(); + gfx::Point mic_origin( + contents_bounds.right() - kMicButtonMargin - mic_size.width(), + contents_bounds.y() + kMicButtonMargin); + mic_button_->SetBoundsRect(gfx::Rect(mic_origin, mic_size)); + + int speech_width = contents_bounds.width() - kTextMargin * 2; + speech_result_->SizeToFit(speech_width); + int speech_height = speech_result_->GetHeightForWidth(speech_width); + speech_result_->SetBounds( + contents_bounds.x() + kTextMargin, + contents_bounds.bottom() - kTextMargin - speech_height, + speech_width, + speech_height); +} + +gfx::Size SpeechView::GetPreferredSize() { + return gfx::Size(0, kSpeechViewMaxHeight); +} + +void SpeechView::ButtonPressed(views::Button* sender, const ui::Event& event) { + delegate_->ToggleSpeechRecognition(); +} + +void SpeechView::OnSpeechSoundLevelChanged(int16 level) { + if (!visible()) + return; + + gfx::Point origin = mic_button_->bounds().CenterPoint(); + int radius = GetIndicatorRadius(level); + origin.Offset(-radius, -radius); + gfx::Rect indicator_bounds = + gfx::Rect(origin, gfx::Size(radius * 2, radius * 2)); + if (indicator_->visible()) { + indicator_animator_->AnimateViewTo(indicator_, indicator_bounds); + } else { + indicator_->SetVisible(true); + indicator_->SetBoundsRect(indicator_bounds); + } +} + +void SpeechView::OnSpeechResult(const base::string16& result, + bool is_final) { + speech_result_->SetText(result); + speech_result_->SetEnabledColor(kResultTextColor); +} + +void SpeechView::OnSpeechRecognitionStateChanged( + SpeechRecognitionState new_state) { + int resource_id = IDR_APP_LIST_SPEECH_MIC_OFF; + if (new_state == SPEECH_RECOGNITION_ON) + resource_id = IDR_APP_LIST_SPEECH_MIC_ON; + else if (new_state == SPEECH_RECOGNITION_IN_SPEECH) + resource_id = IDR_APP_LIST_SPEECH_MIC_RECORDING; + + ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); + mic_button_->SetImage(views::Button::STATE_NORMAL, bundle.GetImageSkiaNamed( + resource_id)); +} + +} // namespace app_list diff --git a/ui/app_list/views/speech_view.h b/ui/app_list/views/speech_view.h new file mode 100644 index 0000000000..18644daa82 --- /dev/null +++ b/ui/app_list/views/speech_view.h @@ -0,0 +1,64 @@ +// Copyright 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. + +#ifndef UI_APP_LIST_VIEWS_SPEECH_VIEW_H_ +#define UI_APP_LIST_VIEWS_SPEECH_VIEW_H_ + +#include "ui/app_list/speech_ui_model_observer.h" +#include "ui/views/controls/button/button.h" +#include "ui/views/view.h" + +namespace views { +class BoundsAnimator; +class ImageButton; +class Label; +} + +namespace app_list { + +class AppListViewDelegate; +class SpeechCardView; + +// SpeechView provides the card-like UI for the search-by-speech. +class SpeechView : public views::View, + public views::ButtonListener, + public SpeechUIModelObserver { + public: + explicit SpeechView(AppListViewDelegate* delegate); + virtual ~SpeechView(); + + // Reset to the original state. + void Reset(); + + // Overridden from views::View: + virtual void Layout() OVERRIDE; + virtual gfx::Size GetPreferredSize() OVERRIDE; + + private: + int GetIndicatorRadius(int16 level); + + // Overridden from views::ButtonListener: + virtual void ButtonPressed(views::Button* sender, + const ui::Event& event) OVERRIDE; + + // Overridden from SpeechUIModelObserver: + virtual void OnSpeechSoundLevelChanged(int16 level) OVERRIDE; + virtual void OnSpeechResult(const base::string16& result, + bool is_final) OVERRIDE; + virtual void OnSpeechRecognitionStateChanged( + SpeechRecognitionState new_state) OVERRIDE; + + AppListViewDelegate* delegate_; + + views::View* indicator_; + views::ImageButton* mic_button_; + views::Label* speech_result_; + scoped_ptr<views::BoundsAnimator> indicator_animator_; + + DISALLOW_COPY_AND_ASSIGN(SpeechView); +}; + +} // namespace app_list + +#endif // UI_APP_LIST_VIEWS_SPEECH_VIEW_H_ diff --git a/ui/aura/aura.gyp b/ui/aura/aura.gyp index 36c4908ce3..5cd992228b 100644 --- a/ui/aura/aura.gyp +++ b/ui/aura/aura.gyp @@ -99,7 +99,10 @@ 'root_window.h', 'window.cc', 'window.h', + 'window_targeter.cc', + 'window_targeter.h', 'window_delegate.h', + 'window_layer_type.h', 'window_observer.h', 'window_tracker.cc', 'window_tracker.h', @@ -148,7 +151,6 @@ '../ui.gyp:ui', '../ui_unittests.gyp:ui_test_support', 'aura', - 'aura_test_support_pak', ], 'include_dirs': [ '..', @@ -161,8 +163,6 @@ 'test/env_test_helper.h', 'test/event_generator.cc', 'test/event_generator.h', - 'test/test_aura_initializer.cc', - 'test/test_aura_initializer.h', 'test/test_cursor_client.cc', 'test/test_cursor_client.h', 'test/test_event_handler.cc', @@ -187,38 +187,6 @@ 'msvs_disabled_warnings': [ 4267, ], }, { - # We build a minimal set of resources required for aura_test_support. - 'target_name': 'aura_test_support_pak', - 'type': 'none', - 'dependencies': [ - '<(DEPTH)/ui/base/strings/ui_strings.gyp:ui_strings', - '<(DEPTH)/ui/resources/ui_resources.gyp:ui_resources', - ], - 'variables': { - 'repack_path': '<(DEPTH)/tools/grit/grit/format/repack.py', - }, - 'actions': [ - { - 'action_name': 'repack_aura_test_support_pack', - 'variables': { - 'pak_inputs': [ - '<(SHARED_INTERMEDIATE_DIR)/ui/app_locale_settings/app_locale_settings_en-US.pak', - '<(SHARED_INTERMEDIATE_DIR)/ui/ui_resources/ui_resources_100_percent.pak', - ], - }, - 'inputs': [ - '<(repack_path)', - '<@(pak_inputs)', - ], - 'outputs': [ - '<(PRODUCT_DIR)/aura_test_support_resources.pak', - ], - 'action': ['python', '<(repack_path)', '<@(_outputs)', - '<@(pak_inputs)'], - }, - ], - }, - { 'target_name': 'aura_demo', 'type': 'executable', 'dependencies': [ @@ -298,6 +266,7 @@ 'test/run_all_unittests.cc', 'test/test_suite.cc', 'test/test_suite.h', + 'window_targeter_unittest.cc', 'window_unittest.cc', ], 'conditions': [ diff --git a/ui/aura/client/default_activation_client.cc b/ui/aura/client/default_activation_client.cc index 629f12ad2d..ccb660b81f 100644 --- a/ui/aura/client/default_activation_client.cc +++ b/ui/aura/client/default_activation_client.cc @@ -102,7 +102,6 @@ void DefaultActivationClient::OnWindowDestroyed(Window* window) { last_active_ = NULL; if (window == GetActiveWindow()) { - window->RemoveObserver(this); active_windows_.pop_back(); Window* next_active = GetActiveWindow(); if (next_active && aura::client::GetActivationChangeObserver(next_active)) { diff --git a/ui/aura/env.cc b/ui/aura/env.cc index 0314480c23..0982d91ad2 100644 --- a/ui/aura/env.cc +++ b/ui/aura/env.cc @@ -10,6 +10,7 @@ #include "ui/aura/window.h" #include "ui/compositor/compositor.h" #include "ui/compositor/compositor_switches.h" +#include "ui/events/event_target_iterator.h" #if defined(USE_X11) #include "base/message_loop/message_pump_x11.h" @@ -128,4 +129,13 @@ ui::EventTarget* Env::GetParentTarget() { return NULL; } +scoped_ptr<ui::EventTargetIterator> Env::GetChildIterator() const { + return scoped_ptr<ui::EventTargetIterator>(); +} + +ui::EventTargeter* Env::GetEventTargeter() { + NOTREACHED(); + return NULL; +} + } // namespace aura diff --git a/ui/aura/env.h b/ui/aura/env.h index 4968d3990e..e326781264 100644 --- a/ui/aura/env.h +++ b/ui/aura/env.h @@ -92,6 +92,8 @@ class AURA_EXPORT Env : public ui::EventTarget { // Overridden from ui::EventTarget: virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE; virtual ui::EventTarget* GetParentTarget() OVERRIDE; + virtual scoped_ptr<ui::EventTargetIterator> GetChildIterator() const OVERRIDE; + virtual ui::EventTargeter* GetEventTargeter() OVERRIDE; ObserverList<EnvObserver> observers_; #if !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(USE_X11) diff --git a/ui/aura/gestures/gesture_recognizer_unittest.cc b/ui/aura/gestures/gesture_recognizer_unittest.cc index 5ae9426eb1..3a18d1fffc 100644 --- a/ui/aura/gestures/gesture_recognizer_unittest.cc +++ b/ui/aura/gestures/gesture_recognizer_unittest.cc @@ -2893,9 +2893,9 @@ TEST_F(GestureRecognizerTest, FlushAllOnHide) { dispatcher()->AsRootWindowHostDelegate()->OnHostTouchEvent(&press2); window->Hide(); EXPECT_EQ(NULL, - ui::GestureRecognizer::Get()->GetTouchLockedTarget(&press1)); + ui::GestureRecognizer::Get()->GetTouchLockedTarget(press1)); EXPECT_EQ(NULL, - ui::GestureRecognizer::Get()->GetTouchLockedTarget(&press2)); + ui::GestureRecognizer::Get()->GetTouchLockedTarget(press2)); } TEST_F(GestureRecognizerTest, LongPressTimerStopsOnPreventDefaultedTouchMoves) { @@ -3564,10 +3564,10 @@ TEST_F(GestureRecognizerTest, ui::GestureRecognizer* gesture_recognizer = ui::GestureRecognizer::Get(); EXPECT_EQ(window.get(), - gesture_recognizer->GetTouchLockedTarget(&press)); + gesture_recognizer->GetTouchLockedTarget(press)); gesture_recognizer->TransferEventsTo(window.get(), NULL); EXPECT_EQ(NULL, - gesture_recognizer->GetTouchLockedTarget(&press)); + gesture_recognizer->GetTouchLockedTarget(press)); // The event-handler removes |window| from its parent on the first // touch-cancel event, so it won't receive the second touch-cancel event. EXPECT_EQ(1, handler->touch_cancelled_count()); diff --git a/ui/aura/remote_root_window_host_win.cc b/ui/aura/remote_root_window_host_win.cc index 6084885e1d..f6de429e2d 100644 --- a/ui/aura/remote_root_window_host_win.cc +++ b/ui/aura/remote_root_window_host_win.cc @@ -11,9 +11,15 @@ #include "base/message_loop/message_loop.h" #include "ipc/ipc_message.h" #include "ipc/ipc_sender.h" +#include "ui/aura/client/aura_constants.h" #include "ui/aura/client/cursor_client.h" #include "ui/aura/root_window.h" +#include "ui/aura/window_property.h" #include "ui/base/cursor/cursor_loader_win.h" +#include "ui/base/ime/composition_text.h" +#include "ui/base/ime/input_method.h" +#include "ui/base/ime/remote_input_method_win.h" +#include "ui/base/ime/text_input_client.h" #include "ui/events/event_utils.h" #include "ui/events/keycodes/keyboard_code_conversion_win.h" #include "ui/base/view_prop.h" @@ -54,6 +60,25 @@ void SetVirtualKeyStates(uint32 flags) { ::SetKeyboardState(keyboard_state); } +void FillCompositionText( + const string16& text, + int32 selection_start, + int32 selection_end, + const std::vector<metro_viewer::UnderlineInfo>& underlines, + ui::CompositionText* composition_text) { + composition_text->Clear(); + composition_text->text = text; + composition_text->selection.set_start(selection_start); + composition_text->selection.set_end(selection_end); + composition_text->underlines.resize(underlines.size()); + for (size_t i = 0; i < underlines.size(); ++i) { + composition_text->underlines[i].start_offset = underlines[i].start_offset; + composition_text->underlines[i].end_offset = underlines[i].end_offset; + composition_text->underlines[i].color = SK_ColorBLACK; + composition_text->underlines[i].thick = underlines[i].thick; + } +} + } // namespace void HandleOpenFile(const base::string16& title, @@ -110,9 +135,11 @@ void HandleSelectFolder(const base::string16& title, } void HandleActivateDesktop(const base::FilePath& shortcut, + bool ash_exit, const ActivateDesktopCompleted& on_success) { DCHECK(aura::RemoteRootWindowHostWin::Instance()); aura::RemoteRootWindowHostWin::Instance()->HandleActivateDesktop(shortcut, + ash_exit, on_success); } @@ -134,7 +161,8 @@ RemoteRootWindowHostWin::RemoteRootWindowHostWin(const gfx::Rect& bounds) : remote_window_(NULL), host_(NULL), ignore_mouse_moves_until_set_cursor_ack_(false), - event_flags_(0) { + event_flags_(0), + window_size_(aura::RootWindowHost::GetNativeScreenSize()) { prop_.reset(new ui::ViewProp(NULL, kRootWindowHostWinKey, this)); } @@ -151,6 +179,12 @@ void RemoteRootWindowHostWin::Connected(IPC::Sender* host, HWND remote_window) { void RemoteRootWindowHostWin::Disconnected() { // Don't CHECK here, Disconnected is called on a channel error which can // happen before we're successfully Connected. + if (!host_) + return; + ui::RemoteInputMethodPrivateWin* remote_input_method_private = + GetRemoteInputMethodPrivate(); + if (remote_input_method_private) + remote_input_method_private->SetRemoteDelegate(NULL); host_ = NULL; remote_window_ = NULL; } @@ -181,10 +215,14 @@ bool RemoteRootWindowHostWin::OnMessageReceived(const IPC::Message& message) { OnSelectFolderDone) IPC_MESSAGE_HANDLER(MetroViewerHostMsg_SetCursorPosAck, OnSetCursorPosAck) - IPC_MESSAGE_HANDLER(MetroViewerHostMsg_WindowSizeChanged, - OnWindowSizeChanged) IPC_MESSAGE_HANDLER(MetroViewerHostMsg_ActivateDesktopDone, OnDesktopActivated) + IPC_MESSAGE_HANDLER(MetroViewerHostMsg_ImeCompositionChanged, + OnImeCompositionChanged) + IPC_MESSAGE_HANDLER(MetroViewerHostMsg_ImeTextCommitted, + OnImeTextCommitted) + IPC_MESSAGE_HANDLER(MetroViewerHostMsg_ImeInputSourceChanged, + OnImeInputSourceChanged) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; @@ -200,12 +238,13 @@ void RemoteRootWindowHostWin::HandleOpenURLOnDesktop( void RemoteRootWindowHostWin::HandleActivateDesktop( const base::FilePath& shortcut, + bool ash_exit, const ActivateDesktopCompleted& on_success) { if (!host_) return; DCHECK(activate_completed_callback_.is_null()); activate_completed_callback_ = on_success; - host_->Send(new MetroViewerHostMsg_ActivateDesktop(shortcut)); + host_->Send(new MetroViewerHostMsg_ActivateDesktop(shortcut, ash_exit)); } void RemoteRootWindowHostWin::HandleOpenFile( @@ -294,6 +333,11 @@ void RemoteRootWindowHostWin::HandleSelectFolder( host_->Send(new MetroViewerHostMsg_DisplaySelectFolder(title)); } +void RemoteRootWindowHostWin::HandleWindowSizeChanged(uint32 width, + uint32 height) { + SetBounds(gfx::Rect(0, 0, width, height)); +} + bool RemoteRootWindowHostWin::IsForegroundWindow() { return ::GetForegroundWindow() == remote_window_; } @@ -314,6 +358,10 @@ gfx::AcceleratedWidget RemoteRootWindowHostWin::GetAcceleratedWidget() { } void RemoteRootWindowHostWin::Show() { + ui::RemoteInputMethodPrivateWin* remote_input_method_private = + GetRemoteInputMethodPrivate(); + if (remote_input_method_private) + remote_input_method_private->SetRemoteDelegate(this); } void RemoteRootWindowHostWin::Hide() { @@ -324,11 +372,11 @@ void RemoteRootWindowHostWin::ToggleFullScreen() { } gfx::Rect RemoteRootWindowHostWin::GetBounds() const { - gfx::Rect r(gfx::Point(0, 0), aura::RootWindowHost::GetNativeScreenSize()); - return r; + return gfx::Rect(window_size_); } void RemoteRootWindowHostWin::SetBounds(const gfx::Rect& bounds) { + window_size_ = bounds.size(); delegate_->OnHostResized(bounds.size()); } @@ -418,6 +466,27 @@ void RemoteRootWindowHostWin::OnDeviceScaleFactorChanged( void RemoteRootWindowHostWin::PrepareForShutdown() { } +void RemoteRootWindowHostWin::CancelComposition() { + host_->Send(new MetroViewerHostMsg_ImeCancelComposition); +} + +void RemoteRootWindowHostWin::OnTextInputClientUpdated( + const std::vector<int32>& input_scopes, + const std::vector<gfx::Rect>& composition_character_bounds) { + std::vector<metro_viewer::CharacterBounds> character_bounds; + for (size_t i = 0; i < composition_character_bounds.size(); ++i) { + const gfx::Rect& rect = composition_character_bounds[i]; + metro_viewer::CharacterBounds bounds; + bounds.left = rect.x(); + bounds.top = rect.y(); + bounds.right = rect.right(); + bounds.bottom = rect.bottom(); + character_bounds.push_back(bounds); + } + host_->Send(new MetroViewerHostMsg_ImeTextInputClientUpdated( + input_scopes, character_bounds)); +} + void RemoteRootWindowHostWin::OnMouseMoved(int32 x, int32 y, int32 flags) { if (ignore_mouse_moves_until_set_cursor_ack_) return; @@ -571,16 +640,51 @@ void RemoteRootWindowHostWin::OnSetCursorPosAck() { ignore_mouse_moves_until_set_cursor_ack_ = false; } -void RemoteRootWindowHostWin::OnWindowSizeChanged(uint32 width, uint32 height) { - SetBounds(gfx::Rect(0, 0, width, height)); -} - void RemoteRootWindowHostWin::OnDesktopActivated() { ActivateDesktopCompleted temp = activate_completed_callback_; activate_completed_callback_.Reset(); temp.Run(); } +ui::RemoteInputMethodPrivateWin* +RemoteRootWindowHostWin::GetRemoteInputMethodPrivate() { + ui::InputMethod* input_method = GetAshWindow()->GetProperty( + aura::client::kRootWindowInputMethodKey); + return ui::RemoteInputMethodPrivateWin::Get(input_method); +} + +void RemoteRootWindowHostWin::OnImeCompositionChanged( + const string16& text, + int32 selection_start, + int32 selection_end, + const std::vector<metro_viewer::UnderlineInfo>& underlines) { + ui::RemoteInputMethodPrivateWin* remote_input_method_private = + GetRemoteInputMethodPrivate(); + if (!remote_input_method_private) + return; + ui::CompositionText composition_text; + FillCompositionText( + text, selection_start, selection_end, underlines, &composition_text); + remote_input_method_private->OnCompositionChanged(composition_text); +} + +void RemoteRootWindowHostWin::OnImeTextCommitted(const string16& text) { + ui::RemoteInputMethodPrivateWin* remote_input_method_private = + GetRemoteInputMethodPrivate(); + if (!remote_input_method_private) + return; + remote_input_method_private->OnTextCommitted(text); +} + +void RemoteRootWindowHostWin::OnImeInputSourceChanged(uint16 language_id, + bool is_ime) { + ui::RemoteInputMethodPrivateWin* remote_input_method_private = + GetRemoteInputMethodPrivate(); + if (!remote_input_method_private) + return; + remote_input_method_private->OnInputSourceChanged(language_id, is_ime); +} + void RemoteRootWindowHostWin::DispatchKeyboardMessage(ui::EventType type, uint32 vkey, uint32 repeat_count, @@ -589,8 +693,14 @@ void RemoteRootWindowHostWin::DispatchKeyboardMessage(ui::EventType type, bool is_character) { SetEventFlags(flags | mouse_event_flags()); if (base::MessageLoop::current()->IsNested()) { - uint32 message = is_character ? WM_CHAR : - (type == ui::ET_KEY_PRESSED ? WM_KEYDOWN : WM_KEYUP); + int index = (flags & ui::EF_ALT_DOWN) ? 1 : 0; + const int char_message[] = {WM_CHAR, WM_SYSCHAR}; + const int keydown_message[] = {WM_KEYDOWN, WM_SYSKEYDOWN}; + const int keyup_message[] = {WM_KEYUP, WM_SYSKEYUP}; + uint32 message = is_character + ? char_message[index] + : (type == ui::ET_KEY_PRESSED ? keydown_message[index] + : keyup_message[index]); ::PostThreadMessage(::GetCurrentThreadId(), message, vkey, diff --git a/ui/aura/remote_root_window_host_win.h b/ui/aura/remote_root_window_host_win.h index ed974d398c..a319d274ac 100644 --- a/ui/aura/remote_root_window_host_win.h +++ b/ui/aura/remote_root_window_host_win.h @@ -11,15 +11,18 @@ #include "base/compiler_specific.h" #include "base/strings/string16.h" #include "ui/aura/window_tree_host.h" +#include "ui/base/ime/remote_input_method_delegate_win.h" #include "ui/events/event.h" #include "ui/events/event_constants.h" #include "ui/gfx/native_widget_types.h" +#include "ui/metro_viewer/ime_types.h" namespace base { class FilePath; } namespace ui { +class RemoteInputMethodPrivateWin; class ViewProp; } @@ -85,14 +88,19 @@ AURA_EXPORT void HandleSelectFolder(const base::string16& title, // Handles the activate desktop command for Metro Chrome Ash. The on_success // callback passed in is invoked when activation is completed. +// The |ash_exit| parameter indicates whether the Ash process would be shutdown +// after activating the desktop. AURA_EXPORT void HandleActivateDesktop( const base::FilePath& shortcut, + bool ash_exit, const ActivateDesktopCompleted& on_success); // RootWindowHost implementaton that receives events from a different // process. In the case of Windows this is the Windows 8 (aka Metro) // frontend process, which forwards input events to this class. -class AURA_EXPORT RemoteRootWindowHostWin : public RootWindowHost { +class AURA_EXPORT RemoteRootWindowHostWin + : public RootWindowHost, + public ui::internal::RemoteInputMethodDelegateWin { public: // Returns the only RemoteRootWindowHostWin, if this is the first time // this function is called, it will call Create() wiht empty bounds. @@ -112,7 +120,11 @@ class AURA_EXPORT RemoteRootWindowHostWin : public RootWindowHost { void HandleOpenURLOnDesktop(const base::FilePath& shortcut, const base::string16& url); - void HandleActivateDesktop(const base::FilePath& shortcut, + // The |ash_exit| parameter indicates whether the Ash process would be + // shutdown after activating the desktop. + void HandleActivateDesktop( + const base::FilePath& shortcut, + bool ash_exit, const ActivateDesktopCompleted& on_success); void HandleOpenFile(const base::string16& title, @@ -139,6 +151,8 @@ class AURA_EXPORT RemoteRootWindowHostWin : public RootWindowHost { const SelectFolderCompletion& on_success, const FileSelectionCanceled& on_failure); + void HandleWindowSizeChanged(uint32 width, uint32 height); + // Returns the active ASH root window. Window* GetAshWindow(); @@ -181,9 +195,18 @@ class AURA_EXPORT RemoteRootWindowHostWin : public RootWindowHost { const std::vector<base::FilePath>& files); void OnSelectFolderDone(bool success, const base::FilePath& folder); void OnSetCursorPosAck(); - void OnWindowSizeChanged(uint32 width, uint32 height); void OnDesktopActivated(); + // For Input Method support: + ui::RemoteInputMethodPrivateWin* GetRemoteInputMethodPrivate(); + void OnImeCompositionChanged( + const string16& text, + int32 selection_start, + int32 selection_end, + const std::vector<metro_viewer::UnderlineInfo>& underlines); + void OnImeTextCommitted(const string16& text); + void OnImeInputSourceChanged(uint16 language_id, bool is_ime); + // RootWindowHost overrides: virtual RootWindow* GetRootWindow() OVERRIDE; virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE; @@ -207,6 +230,12 @@ class AURA_EXPORT RemoteRootWindowHostWin : public RootWindowHost { virtual void OnDeviceScaleFactorChanged(float device_scale_factor) OVERRIDE; virtual void PrepareForShutdown() OVERRIDE; + // ui::internal::RemoteInputMethodDelegateWin overrides: + virtual void CancelComposition() OVERRIDE; + virtual void OnTextInputClientUpdated( + const std::vector<int32>& input_scopes, + const std::vector<gfx::Rect>& composition_character_bounds) OVERRIDE; + // Helper function to dispatch a keyboard message to the desired target. // The default target is the RootWindowHostDelegate. For nested message loop // invocations we post a synthetic keyboard message directly into the message @@ -262,6 +291,9 @@ class AURA_EXPORT RemoteRootWindowHostWin : public RootWindowHost { // description of SetEventFlags(). uint32 event_flags_; + // Current size of this root window. + gfx::Size window_size_; + DISALLOW_COPY_AND_ASSIGN(RemoteRootWindowHostWin); }; diff --git a/ui/aura/root_window.cc b/ui/aura/root_window.cc index 81bd6bc2b1..84c2e2260b 100644 --- a/ui/aura/root_window.cc +++ b/ui/aura/root_window.cc @@ -21,6 +21,7 @@ #include "ui/aura/root_window_transformer.h" #include "ui/aura/window.h" #include "ui/aura/window_delegate.h" +#include "ui/aura/window_targeter.h" #include "ui/aura/window_tracker.h" #include "ui/aura/window_tree_host.h" #include "ui/base/hit_test.h" @@ -148,12 +149,15 @@ RootWindow::RootWindow(const CreateParams& params) mouse_pressed_handler_(NULL), mouse_moved_handler_(NULL), event_dispatch_target_(NULL), + old_dispatch_target_(NULL), synthesize_mouse_move_(false), move_hold_count_(0), repost_event_factory_(this), held_event_factory_(this) { window()->set_dispatcher(this); window()->SetName("RootWindow"); + window()->set_event_targeter( + scoped_ptr<ui::EventTargeter>(new WindowTargeter())); compositor_.reset(new ui::Compositor(host_->GetAcceleratedWidget())); DCHECK(compositor_.get()); @@ -310,10 +314,15 @@ void RootWindow::ScheduleRedrawRect(const gfx::Rect& damage_rect) { } Window* RootWindow::GetGestureTarget(ui::GestureEvent* event) { - Window* target = client::GetCaptureWindow(window()); + Window* target = NULL; + if (!event->IsEndingEvent()) { + // The window that received the start event (e.g. scroll begin) needs to + // receive the end event (e.g. scroll end). + target = client::GetCaptureWindow(window()); + } if (!target) { target = ConsumerToWindow( - ui::GestureRecognizer::Get()->GetTargetForGestureEvent(event)); + ui::GestureRecognizer::Get()->GetTargetForGestureEvent(*event)); } return target; @@ -327,7 +336,7 @@ void RootWindow::DispatchGestureEvent(ui::GestureEvent* event) { Window* target = GetGestureTarget(event); if (target) { event->ConvertLocationToTarget(window(), target); - DispatchDetails details = ProcessEvent(target, event); + DispatchDetails details = DispatchEvent(target, event); if (details.dispatcher_destroyed) return; } @@ -517,20 +526,7 @@ ui::EventDispatchDetails RootWindow::DispatchMouseEnterOrExit( mouse_moved_handler_, type, event.flags() | ui::EF_IS_SYNTHESIZED); - return ProcessEvent(mouse_moved_handler_, &translated_event); -} - -ui::EventDispatchDetails RootWindow::ProcessEvent(Window* target, - ui::Event* event) { - Window* old_target = event_dispatch_target_; - event_dispatch_target_ = target; - DispatchDetails details = DispatchEvent(target, event); - if (!details.dispatcher_destroyed) { - if (event_dispatch_target_ != target) - details.target_destroyed = true; - event_dispatch_target_ = old_target; - } - return details; + return DispatchEvent(mouse_moved_handler_, &translated_event); } ui::EventDispatchDetails RootWindow::ProcessGestures( @@ -543,7 +539,7 @@ ui::EventDispatchDetails RootWindow::ProcessGestures( for (size_t i = 0; i < gestures->size(); ++i) { ui::GestureEvent* event = gestures->get().at(i); event->ConvertLocationToTarget(window(), target); - details = ProcessEvent(target, event); + details = DispatchEvent(target, event); if (details.dispatcher_destroyed || details.target_destroyed) break; } @@ -629,7 +625,7 @@ void RootWindow::UpdateCapture(Window* old_capture, ui::MouseEvent event(ui::ET_MOUSE_CAPTURE_CHANGED, gfx::Point(), gfx::Point(), 0); - DispatchDetails details = ProcessEvent(old_capture, &event); + DispatchDetails details = DispatchEvent(old_capture, &event); if (details.dispatcher_destroyed) return; @@ -664,12 +660,38 @@ void RootWindow::ReleaseNativeCapture() { } //////////////////////////////////////////////////////////////////////////////// +// RootWindow, ui::EventProcessor implementation: +ui::EventTarget* RootWindow::GetRootTarget() { + return window(); +} + +//////////////////////////////////////////////////////////////////////////////// // RootWindow, ui::EventDispatcherDelegate implementation: bool RootWindow::CanDispatchToTarget(ui::EventTarget* target) { return event_dispatch_target_ == target; } +ui::EventDispatchDetails RootWindow::PreDispatchEvent(ui::EventTarget* target, + ui::Event* event) { + old_dispatch_target_ = event_dispatch_target_; + event_dispatch_target_ = static_cast<Window*>(target); + return DispatchDetails(); +} + +ui::EventDispatchDetails RootWindow::PostDispatchEvent(ui::EventTarget* target, + const ui::Event& event) { + DispatchDetails details; + if (target != event_dispatch_target_) + details.target_destroyed = true; + event_dispatch_target_ = old_dispatch_target_; + old_dispatch_target_ = NULL; +#ifndef NDEBUG + DCHECK(!event_dispatch_target_ || window()->Contains(event_dispatch_target_)); +#endif + return details; +} + //////////////////////////////////////////////////////////////////////////////// // RootWindow, ui::GestureEventHelper implementation: @@ -717,7 +739,7 @@ bool RootWindow::OnHostKeyEvent(ui::KeyEvent* event) { client::GetFocusClient(window())->FocusWindow(NULL); return false; } - details = ProcessEvent(focused_window ? focused_window : window(), event); + details = DispatchEvent(focused_window ? focused_window : window(), event); if (details.dispatcher_destroyed) return true; return event->handled(); @@ -752,7 +774,7 @@ bool RootWindow::OnHostScrollEvent(ui::ScrollEvent* event) { flags |= ui::EF_IS_NON_CLIENT; event->set_flags(flags); - details = ProcessEvent(target, event); + details = DispatchEvent(target, event); if (details.dispatcher_destroyed) return true; return event->handled(); @@ -785,7 +807,7 @@ void RootWindow::OnHostCancelMode() { ui::CancelModeEvent event; Window* focused_window = client::GetFocusClient(window())->GetFocusedWindow(); DispatchDetails details = - ProcessEvent(focused_window ? focused_window : window(), &event); + DispatchEvent(focused_window ? focused_window : window(), &event); if (details.dispatcher_destroyed) return; } @@ -830,7 +852,7 @@ void RootWindow::OnHostResized(const gfx::Size& size) { // The layer, and the observers should be notified of the // transformed size of the root window. - UpdateRootWindowSize(size); + UpdateRootWindowSize(host_->GetBounds().size()); FOR_EACH_OBSERVER(RootWindowObserver, observers_, OnRootWindowHostResized(this)); } @@ -847,6 +869,10 @@ const RootWindow* RootWindow::AsRootWindow() const { return this; } +ui::EventProcessor* RootWindow::GetEventProcessor() { + return this; +} + //////////////////////////////////////////////////////////////////////////////// // RootWindow, private: @@ -978,7 +1004,7 @@ ui::EventDispatchDetails RootWindow::DispatchMouseEventToTarget( event->ConvertLocationToTarget(window(), target); if (IsNonClientLocation(target, event->location())) event->set_flags(event->flags() | ui::EF_IS_NON_CLIENT); - return ProcessEvent(target, event); + return DispatchEvent(target, event); } return DispatchDetails(); } @@ -1009,7 +1035,7 @@ ui::EventDispatchDetails RootWindow::DispatchTouchEventImpl( Window* target = client::GetCaptureWindow(window()); if (!target) { target = ConsumerToWindow( - ui::GestureRecognizer::Get()->GetTouchLockedTarget(event)); + ui::GestureRecognizer::Get()->GetTouchLockedTarget(*event)); if (!target) { target = ConsumerToWindow(ui::GestureRecognizer::Get()-> GetTargetForLocation(event->location())); @@ -1025,7 +1051,7 @@ ui::EventDispatchDetails RootWindow::DispatchTouchEventImpl( if (!target && !window()->bounds().Contains(event->location())) { // If the initial touch is outside the root window, target the root. target = window(); - DispatchDetails details = ProcessEvent(target ? target : NULL, event); + DispatchDetails details = DispatchEvent(target ? target : NULL, event); if (details.dispatcher_destroyed) return details; result = event->result(); @@ -1038,7 +1064,7 @@ ui::EventDispatchDetails RootWindow::DispatchTouchEventImpl( } event->ConvertLocationToTarget(window(), target); - DispatchDetails details = ProcessEvent(target, event); + DispatchDetails details = DispatchEvent(target, event); if (details.dispatcher_destroyed) return details; result = event->result(); diff --git a/ui/aura/root_window.h b/ui/aura/root_window.h index 26274d45a6..d85e1d845e 100644 --- a/ui/aura/root_window.h +++ b/ui/aura/root_window.h @@ -21,7 +21,8 @@ #include "ui/compositor/compositor.h" #include "ui/compositor/layer_animation_observer.h" #include "ui/events/event_constants.h" -#include "ui/events/event_dispatcher.h" +#include "ui/events/event_processor.h" +#include "ui/events/event_targeter.h" #include "ui/events/gestures/gesture_recognizer.h" #include "ui/events/gestures/gesture_types.h" #include "ui/gfx/native_widget_types.h" @@ -50,9 +51,10 @@ class RootWindowHost; class RootWindowObserver; class RootWindowTransformer; class TestScreen; +class WindowTargeter; // RootWindow is responsible for hosting a set of windows. -class AURA_EXPORT RootWindow : public ui::EventDispatcherDelegate, +class AURA_EXPORT RootWindow : public ui::EventProcessor, public ui::GestureEventHelper, public ui::LayerAnimationObserver, public aura::client::CaptureDelegate, @@ -243,8 +245,6 @@ class AURA_EXPORT RootWindow : public ui::EventDispatcherDelegate, ui::EventDispatchDetails DispatchMouseEnterOrExit( const ui::MouseEvent& event, ui::EventType type) WARN_UNUSED_RESULT; - ui::EventDispatchDetails ProcessEvent(Window* target, - ui::Event* event) WARN_UNUSED_RESULT; ui::EventDispatchDetails ProcessGestures( ui::GestureRecognizer::Gestures* gestures) WARN_UNUSED_RESULT; @@ -271,8 +271,15 @@ class AURA_EXPORT RootWindow : public ui::EventDispatcherDelegate, virtual void SetNativeCapture() OVERRIDE; virtual void ReleaseNativeCapture() OVERRIDE; + // Overridden from ui::EventProcessor: + virtual ui::EventTarget* GetRootTarget() OVERRIDE; + // Overridden from ui::EventDispatcherDelegate. virtual bool CanDispatchToTarget(ui::EventTarget* target) OVERRIDE; + virtual ui::EventDispatchDetails PreDispatchEvent(ui::EventTarget* target, + ui::Event* event) OVERRIDE; + virtual ui::EventDispatchDetails PostDispatchEvent( + ui::EventTarget* target, const ui::Event& event) OVERRIDE; // Overridden from ui::GestureEventHelper. virtual bool CanDispatchToConsumer(ui::GestureConsumer* consumer) OVERRIDE; @@ -302,6 +309,7 @@ class AURA_EXPORT RootWindow : public ui::EventDispatcherDelegate, virtual float GetDeviceScaleFactor() OVERRIDE; virtual RootWindow* AsRootWindow() OVERRIDE; virtual const RootWindow* AsRootWindow() const OVERRIDE; + virtual ui::EventProcessor* GetEventProcessor() OVERRIDE; ui::EventDispatchDetails OnHostMouseEventImpl(ui::MouseEvent* event) WARN_UNUSED_RESULT; @@ -354,6 +362,7 @@ class AURA_EXPORT RootWindow : public ui::EventDispatcherDelegate, Window* mouse_pressed_handler_; Window* mouse_moved_handler_; Window* event_dispatch_target_; + Window* old_dispatch_target_; bool synthesize_mouse_move_; bool waiting_on_compositing_end_; diff --git a/ui/aura/root_window_host_win.h b/ui/aura/root_window_host_win.h index 64215a7915..3d99821400 100644 --- a/ui/aura/root_window_host_win.h +++ b/ui/aura/root_window_host_win.h @@ -6,8 +6,8 @@ #define UI_AURA_ROOT_WINDOW_HOST_WIN_H_ #include "base/compiler_specific.h" +#include "ui/aura/aura_export.h" #include "ui/aura/window_tree_host.h" -#include "ui/base/ui_export.h" #include "ui/gfx/win/window_impl.h" namespace aura { diff --git a/ui/aura/root_window_host_x11.cc b/ui/aura/root_window_host_x11.cc index 663edcf91d..4fb0047133 100644 --- a/ui/aura/root_window_host_x11.cc +++ b/ui/aura/root_window_host_x11.cc @@ -84,10 +84,8 @@ bool IsSideBezelsEnabled() { } #endif -void SelectEventsForRootWindow(XDisplay* display, ::Window root_window) { - if (!ui::IsXInput2Available()) - return; - +void SelectXInput2EventsForRootWindow(XDisplay* display, ::Window root_window) { + CHECK(ui::IsXInput2Available()); unsigned char mask[XIMaskLen(XI_LASTEVENT)] = {}; memset(mask, 0, sizeof(mask)); @@ -101,16 +99,20 @@ void SelectEventsForRootWindow(XDisplay* display, ::Window root_window) { evmask.mask = mask; XISelectEvents(display, root_window, &evmask, 1); - // Selecting for touch events seems to fail on some cases (e.g. when logging - // in incognito). So select for non-touch events first, and then select for - // touch-events (but keep the other events in the mask, i.e. do not memset - // |mask| back to 0). - // TODO(sad): Figure out why this happens. http://crbug.com/153976 -#if defined(USE_XI2_MT) - XISetMask(mask, XI_TouchBegin); - XISetMask(mask, XI_TouchUpdate); - XISetMask(mask, XI_TouchEnd); - XISelectEvents(display, root_window, &evmask, 1); +#if defined(OS_CHROMEOS) + if (base::SysInfo::IsRunningOnChromeOS()) { + // It is necessary to listen for touch events on the root window for proper + // touch event calibration on Chrome OS, but this is not currently necessary + // on the desktop. This seems to fail in some cases (e.g. when logging + // in incognito). So select for non-touch events first, and then select for + // touch-events (but keep the other events in the mask, i.e. do not memset + // |mask| back to 0). + // TODO(sad): Figure out why this happens. http://crbug.com/153976 + XISetMask(mask, XI_TouchBegin); + XISetMask(mask, XI_TouchUpdate); + XISetMask(mask, XI_TouchEnd); + XISelectEvents(display, root_window, &evmask, 1); + } #endif } @@ -344,10 +346,10 @@ RootWindowHostX11::RootWindowHostX11(const gfx::Rect& bounds) XSelectInput(xdisplay_, xwindow_, event_mask); XFlush(xdisplay_); - if (ui::IsXInput2Available()) + if (ui::IsXInput2Available()) { ui::TouchFactory::GetInstance()->SetupXI2ForXWindow(xwindow_); - - SelectEventsForRootWindow(xdisplay_, x_root_window_); + SelectXInput2EventsForRootWindow(xdisplay_, x_root_window_); + } // TODO(erg): We currently only request window deletion events. We also // should listen for activation events and anything else that GTK+ listens @@ -820,6 +822,10 @@ void RootWindowHostX11::OnRootWindowInitialized(RootWindow* root_window) { SetCrOSTapPaused(false); } +ui::EventProcessor* RootWindowHostX11::GetEventProcessor() { + return delegate_->GetEventProcessor(); +} + bool RootWindowHostX11::DispatchEventForRootWindow( const base::NativeEvent& event) { switch (event->type) { diff --git a/ui/aura/root_window_host_x11.h b/ui/aura/root_window_host_x11.h index 53bf46e443..d4b35186a8 100644 --- a/ui/aura/root_window_host_x11.h +++ b/ui/aura/root_window_host_x11.h @@ -18,6 +18,7 @@ #include "ui/aura/env_observer.h" #include "ui/aura/window_tree_host.h" #include "ui/base/x/x11_util.h" +#include "ui/events/event_source.h" #include "ui/gfx/insets.h" #include "ui/gfx/rect.h" #include "ui/gfx/x/x11_atom_cache.h" @@ -34,6 +35,7 @@ class TouchEventCalibrate; class AURA_EXPORT RootWindowHostX11 : public RootWindowHost, public base::MessageLoop::Dispatcher, + public ui::EventSource, public EnvObserver { public: explicit RootWindowHostX11(const gfx::Rect& bounds); @@ -68,6 +70,10 @@ class AURA_EXPORT RootWindowHostX11 : public RootWindowHost, // EnvObserver overrides. virtual void OnWindowInitialized(Window* window) OVERRIDE; virtual void OnRootWindowInitialized(RootWindow* root_window) OVERRIDE; + + // ui::EventSource overrides. + virtual ui::EventProcessor* GetEventProcessor() OVERRIDE; + private: class MouseMoveFilter; diff --git a/ui/aura/root_window_host_x11_unittest.cc b/ui/aura/root_window_host_x11_unittest.cc index 871ca68824..576707a09c 100644 --- a/ui/aura/root_window_host_x11_unittest.cc +++ b/ui/aura/root_window_host_x11_unittest.cc @@ -9,10 +9,15 @@ #include "ui/aura/root_window_host_x11.h" #include "ui/aura/test/aura_test_base.h" #include "ui/aura/window_tree_host_delegate.h" +#include "ui/events/event_processor.h" +#include "ui/events/event_target.h" +#include "ui/events/event_target_iterator.h" #include "ui/events/test/events_test_utils_x11.h" namespace { -class TestRootWindowHostDelegate : public aura::RootWindowHostDelegate { +class TestRootWindowHostDelegate : public aura::RootWindowHostDelegate, + public ui::EventProcessor, + public ui::EventTarget { public: TestRootWindowHostDelegate() : last_touch_type_(ui::ET_UNKNOWN), last_touch_id_(-1), @@ -20,17 +25,16 @@ class TestRootWindowHostDelegate : public aura::RootWindowHostDelegate { } virtual ~TestRootWindowHostDelegate() {} + // aura::RootWindowHostDelegate: virtual bool OnHostKeyEvent(ui::KeyEvent* event) OVERRIDE { return true; } - virtual bool OnHostMouseEvent(ui::MouseEvent* event) OVERRIDE { return true; } virtual bool OnHostScrollEvent(ui::ScrollEvent* event) OVERRIDE { return true; } - virtual bool OnHostTouchEvent(ui::TouchEvent* event) OVERRIDE { last_touch_id_ = event->touch_id(); last_touch_type_ = event->type(); @@ -39,32 +43,42 @@ class TestRootWindowHostDelegate : public aura::RootWindowHostDelegate { } virtual void OnHostCancelMode() OVERRIDE {} - - // Called when the windowing system activates the window. virtual void OnHostActivated() OVERRIDE {} - - // Called when system focus is changed to another window. virtual void OnHostLostWindowCapture() OVERRIDE {} - - // Called when the windowing system has mouse grab because it's performing a - // window move on our behalf, but we should still paint as if we're active. virtual void OnHostLostMouseGrab() OVERRIDE {} - virtual void OnHostPaint(const gfx::Rect& damage_rect) OVERRIDE {} - virtual void OnHostMoved(const gfx::Point& origin) OVERRIDE {} virtual void OnHostResized(const gfx::Size& size) OVERRIDE {} + virtual float GetDeviceScaleFactor() OVERRIDE { return 1.0f; } + virtual aura::RootWindow* AsRootWindow() OVERRIDE { return NULL; } + virtual const aura::RootWindow* AsRootWindow() const OVERRIDE { return NULL; } + virtual ui::EventProcessor* GetEventProcessor() OVERRIDE { + return this; + } - virtual float GetDeviceScaleFactor() OVERRIDE { - return 1.0f; + // ui::EventProcessor: + virtual ui::EventTarget* GetRootTarget() OVERRIDE { return this; } + virtual bool CanDispatchToTarget(ui::EventTarget* target) OVERRIDE { + return true; } - virtual aura::RootWindow* AsRootWindow() OVERRIDE { - return NULL; + // ui::EventHandler: + virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE { + last_touch_id_ = event->touch_id(); + last_touch_type_ = event->type(); + last_touch_location_ = event->location(); + } + + // ui::EventTarget: + virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE { + return true; } - virtual const aura::RootWindow* AsRootWindow() const OVERRIDE { - return NULL; + virtual ui::EventTarget* GetParentTarget() OVERRIDE { return NULL; } + virtual scoped_ptr<ui::EventTargetIterator> + GetChildIterator() const OVERRIDE { + return scoped_ptr<ui::EventTargetIterator>(); } + virtual ui::EventTargeter* GetEventTargeter() OVERRIDE { return &targeter_; } ui::EventType last_touch_type() { return last_touch_type_; @@ -82,6 +96,7 @@ class TestRootWindowHostDelegate : public aura::RootWindowHostDelegate { ui::EventType last_touch_type_; int last_touch_id_; gfx::Point last_touch_location_; + ui::EventTargeter targeter_; DISALLOW_COPY_AND_ASSIGN(TestRootWindowHostDelegate); }; @@ -110,7 +125,7 @@ TEST_F(RootWindowHostX11Test, DispatchTouchEventToOneRootWindow) { std::vector<unsigned int> devices; devices.push_back(0); - ui::SetupTouchDevicesForTest(devices); + ui::SetUpTouchDevicesForTest(devices); std::vector<ui::Valuator> valuators; EXPECT_EQ(ui::ET_UNKNOWN, delegate->last_touch_type()); @@ -182,7 +197,7 @@ TEST_F(RootWindowHostX11Test, DispatchTouchEventToTwoRootWindow) { std::vector<unsigned int> devices; devices.push_back(0); - ui::SetupTouchDevicesForTest(devices); + ui::SetUpTouchDevicesForTest(devices); std::vector<ui::Valuator> valuators; EXPECT_EQ(ui::ET_UNKNOWN, delegate1->last_touch_type()); diff --git a/ui/aura/root_window_unittest.cc b/ui/aura/root_window_unittest.cc index 9942b5dd21..f5d13b9363 100644 --- a/ui/aura/root_window_unittest.cc +++ b/ui/aura/root_window_unittest.cc @@ -1417,4 +1417,37 @@ TEST_F(RootWindowTest, WindowHideCancelsActiveGestures) { EventTypesToString(filter->events())); } +// Places two windows side by side. Presses down on one window, and starts a +// scroll. Sets capture on the other window and ensures that the "ending" events +// aren't sent to the window which gained capture. +TEST_F(RootWindowTest, EndingEventDoesntRetarget) { + scoped_ptr<Window> window1(CreateNormalWindow(1, root_window(), NULL)); + window1->SetBounds(gfx::Rect(0, 0, 40, 40)); + + scoped_ptr<Window> window2(CreateNormalWindow(2, root_window(), NULL)); + window2->SetBounds(gfx::Rect(40, 0, 40, 40)); + + EventFilterRecorder* filter1 = new EventFilterRecorder(); + window1->SetEventFilter(filter1); // passes ownership + EventFilterRecorder* filter2 = new EventFilterRecorder(); + window2->SetEventFilter(filter2); // passes ownership + + gfx::Point position = window1->bounds().origin(); + ui::TouchEvent press(ui::ET_TOUCH_PRESSED, position, 0, base::TimeDelta()); + dispatcher()->AsRootWindowHostDelegate()->OnHostTouchEvent(&press); + + gfx::Point position2 = window1->bounds().CenterPoint(); + ui::TouchEvent move(ui::ET_TOUCH_MOVED, position2, 0, base::TimeDelta()); + dispatcher()->AsRootWindowHostDelegate()->OnHostTouchEvent(&move); + + window2->SetCapture(); + + EXPECT_EQ("TOUCH_PRESSED GESTURE_BEGIN GESTURE_TAP_DOWN TOUCH_MOVED " + "GESTURE_TAP_CANCEL GESTURE_SCROLL_BEGIN GESTURE_SCROLL_UPDATE " + "TOUCH_CANCELLED GESTURE_SCROLL_END GESTURE_END", + EventTypesToString(filter1->events())); + + EXPECT_TRUE(filter2->events().empty()); +} + } // namespace aura diff --git a/ui/aura/test/test_aura_initializer.cc b/ui/aura/test/test_aura_initializer.cc deleted file mode 100644 index c336eb44d2..0000000000 --- a/ui/aura/test/test_aura_initializer.cc +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) 2012 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. - -#include "ui/aura/test/test_aura_initializer.h" - -#include "base/base_paths.h" -#include "base/path_service.h" -#include "ui/base/resource/resource_bundle.h" - -namespace aura { -namespace test { - -TestAuraInitializer::TestAuraInitializer() { - base::FilePath pak_file; - PathService::Get(base::DIR_MODULE, &pak_file); - pak_file = pak_file.Append(FILE_PATH_LITERAL( - "aura_test_support_resources.pak")); - ui::ResourceBundle::InitSharedInstanceWithPakPath(pak_file); -} - -TestAuraInitializer::~TestAuraInitializer() { - ui::ResourceBundle::CleanupSharedInstance(); -} - -} // namespace test -} // namespace aura diff --git a/ui/aura/test/test_aura_initializer.h b/ui/aura/test/test_aura_initializer.h deleted file mode 100644 index bfbfe2f320..0000000000 --- a/ui/aura/test/test_aura_initializer.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) 2012 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. - -#ifndef UI_AURA_TEST_TEST_AURA_INITIALIZER_H_ -#define UI_AURA_TEST_TEST_AURA_INITIALIZER_H_ - -#include "base/basictypes.h" - -namespace aura { -namespace test { - -// Initializes various objects needed to run unit tests that use aura::* -// objects. -class TestAuraInitializer { - public: - TestAuraInitializer(); - virtual ~TestAuraInitializer(); - - private: - DISALLOW_COPY_AND_ASSIGN(TestAuraInitializer); -}; - -} // namespace test -} // namespace aura - -#endif // UI_AURA_TEST_TEST_AURA_INITIALIZER_H_ diff --git a/ui/aura/window.cc b/ui/aura/window.cc index 1cd6a3e15f..a13a3b34e2 100644 --- a/ui/aura/window.cc +++ b/ui/aura/window.cc @@ -28,13 +28,47 @@ #include "ui/aura/window_tree_host.h" #include "ui/compositor/compositor.h" #include "ui/compositor/layer.h" +#include "ui/events/event_target_iterator.h" #include "ui/gfx/animation/multi_animation.h" #include "ui/gfx/canvas.h" #include "ui/gfx/path.h" +#include "ui/gfx/scoped_canvas.h" #include "ui/gfx/screen.h" namespace aura { +namespace { + +WindowLayerType UILayerTypeToWindowLayerType(ui::LayerType layer_type) { + switch (layer_type) { + case ui::LAYER_NOT_DRAWN: + return WINDOW_LAYER_NOT_DRAWN; + case ui::LAYER_TEXTURED: + return WINDOW_LAYER_TEXTURED; + case ui::LAYER_SOLID_COLOR: + return WINDOW_LAYER_SOLID_COLOR; + } + NOTREACHED(); + return WINDOW_LAYER_NOT_DRAWN; +} + +ui::LayerType WindowLayerTypeToUILayerType(WindowLayerType window_layer_type) { + switch (window_layer_type) { + case WINDOW_LAYER_NONE: + break; + case WINDOW_LAYER_NOT_DRAWN: + return ui::LAYER_NOT_DRAWN; + case WINDOW_LAYER_TEXTURED: + return ui::LAYER_TEXTURED; + case WINDOW_LAYER_SOLID_COLOR: + return ui::LAYER_SOLID_COLOR; + } + NOTREACHED(); + return ui::LAYER_NOT_DRAWN; +} + +} // namespace + class ScopedCursorHider { public: explicit ScopedCursorHider(Window* window) @@ -96,8 +130,7 @@ Window::Window(WindowDelegate* delegate) } Window::~Window() { - // layer_ can be NULL if Init() wasn't invoked, which can happen - // only in tests. + // |layer_| can be NULL during tests, or if this Window is layerless. if (layer_) layer_->SuppressPaint(); @@ -134,7 +167,12 @@ Window::~Window() { // Delegate and observers need to be notified after transients are deleted. if (delegate_) delegate_->OnWindowDestroyed(); - FOR_EACH_OBSERVER(WindowObserver, observers_, OnWindowDestroyed(this)); + ObserverListBase<WindowObserver>::Iterator iter(observers_); + WindowObserver* observer; + while ((observer = iter.GetNext())) { + RemoveObserver(observer); + observer->OnWindowDestroyed(this); + } // Clear properties. for (std::map<const void*, Value>::const_iterator iter = prop_map_.begin(); @@ -145,21 +183,28 @@ Window::~Window() { } prop_map_.clear(); - // If we have layer it will either be destroyed by layer_owner_'s dtor, or by - // whoever acquired it. We don't have a layer if Init() wasn't invoked, which - // can happen in tests. - if (layer_) + // If we have layer it will either be destroyed by |layer_owner_|'s dtor, or + // by whoever acquired it. We don't have a layer if Init() wasn't invoked or + // we are layerless. + if (layer_) { layer_->set_delegate(NULL); - layer_ = NULL; + layer_ = NULL; + } } void Window::Init(ui::LayerType layer_type) { - layer_ = new ui::Layer(layer_type); - layer_owner_.reset(layer_); - layer_->SetVisible(false); - layer_->set_delegate(this); - UpdateLayerName(name_); - layer_->SetFillsBoundsOpaquely(!transparent_); + InitWithWindowLayerType(UILayerTypeToWindowLayerType(layer_type)); +} + +void Window::InitWithWindowLayerType(WindowLayerType window_layer_type) { + if (window_layer_type != WINDOW_LAYER_NONE) { + layer_ = new ui::Layer(WindowLayerTypeToUILayerType(window_layer_type)); + layer_owner_.reset(layer_); + layer_->SetVisible(false); + layer_->set_delegate(this); + UpdateLayerName(name_); + layer_->SetFillsBoundsOpaquely(!transparent_); + } Env::GetInstance()->NotifyWindowInitialized(this); } @@ -203,20 +248,20 @@ ui::Layer* Window::RecreateLayer() { void Window::SetType(client::WindowType type) { // Cannot change type after the window is initialized. - DCHECK(!layer()); + DCHECK(!layer_); type_ = type; } void Window::SetName(const std::string& name) { name_ = name; - if (layer()) + if (layer_) UpdateLayerName(name_); } void Window::SetTransparent(bool transparent) { transparent_ = transparent; - if (layer()) + if (layer_) layer_->SetFillsBoundsOpaquely(!transparent_); } @@ -257,7 +302,13 @@ bool Window::IsVisible() const { // when a Window is hidden, we want this function to return false immediately // after, even though the client may decide to animate the hide effect (and // so the layer will be visible for some time after Hide() is called). - return visible_ && layer_ && layer_->IsDrawn(); + for (const Window* window = this; window; window = window->parent()) { + if (!window->visible_) + return false; + if (window->layer_) + return window->layer_->IsDrawn(); + } + return false; } gfx::Rect Window::GetBoundsInRootWindow() const { @@ -287,10 +338,15 @@ gfx::Rect Window::GetBoundsInScreen() const { } void Window::SetTransform(const gfx::Transform& transform) { + if (!layer_) { + // Transforms aren't supported on layerless windows. + NOTREACHED(); + return; + } WindowEventDispatcher* dispatcher = GetDispatcher(); bool contained_mouse = IsVisible() && dispatcher && ContainsPointInRoot(dispatcher->GetLastMouseLocationInRoot()); - layer()->SetTransform(transform); + layer_->SetTransform(transform); if (dispatcher) dispatcher->OnWindowTransformed(this, contained_mouse); } @@ -330,15 +386,36 @@ void Window::SetBoundsInScreen(const gfx::Rect& new_bounds_in_screen, } gfx::Rect Window::GetTargetBounds() const { - return layer_->GetTargetBounds(); -} + if (!layer_) + return bounds(); + + if (!parent_ || parent_->layer_) + return layer_->GetTargetBounds(); -const gfx::Rect& Window::bounds() const { - return layer_->bounds(); + // We have a layer but our parent (who is valid) doesn't. This means the + // coordinates of the layer are relative to the first ancestor with a layer; + // convert to be relative to parent. + gfx::Vector2d offset; + const aura::Window* ancestor_with_layer = + parent_->GetAncestorWithLayer(&offset); + if (!ancestor_with_layer) + return layer_->GetTargetBounds(); + + gfx::Rect layer_target_bounds = layer_->GetTargetBounds(); + layer_target_bounds -= offset; + return layer_target_bounds; } void Window::SchedulePaintInRect(const gfx::Rect& rect) { - if (layer_->SchedulePaint(rect)) { + if (!layer_ && parent_) { + // Notification of paint scheduled happens for the window with a layer. + gfx::Rect parent_rect(bounds().size()); + parent_rect.Intersect(rect); + if (!parent_rect.IsEmpty()) { + parent_rect.Offset(bounds().origin().OffsetFromOrigin()); + parent_->SchedulePaintInRect(parent_rect); + } + } else if (layer_ && layer_->SchedulePaint(rect)) { FOR_EACH_OBSERVER( WindowObserver, observers_, OnWindowPaintScheduled(this, rect)); } @@ -378,9 +455,15 @@ void Window::AddChild(Window* child) { children_.end()); if (child->parent()) child->parent()->RemoveChildImpl(child, this); - child->parent_ = this; - layer_->Add(child->layer_); + gfx::Vector2d offset; + aura::Window* ancestor_with_layer = GetAncestorWithLayer(&offset); + if (ancestor_with_layer) { + offset += child->bounds().OffsetFromOrigin(); + child->ReparentLayers(ancestor_with_layer->layer(), offset); + } + + child->parent_ = this; children_.push_back(child); if (layout_manager_) @@ -472,8 +555,20 @@ void Window::ConvertPointToTarget(const Window* source, client::ScreenPositionClient* target_client = client::GetScreenPositionClient(target->GetRootWindow()); target_client->ConvertPointFromScreen(target, point); + } else if ((source != target) && (!source->layer_ || !target->layer_)) { + if (!source->layer_) { + gfx::Vector2d offset_to_layer; + source = source->GetAncestorWithLayer(&offset_to_layer); + *point += offset_to_layer; + } + if (!target->layer_) { + gfx::Vector2d offset_to_layer; + target = target->GetAncestorWithLayer(&offset_to_layer); + *point -= offset_to_layer; + } + ui::Layer::ConvertPointToLayer(source->layer_, target->layer_, point); } else { - ui::Layer::ConvertPointToLayer(source->layer(), target->layer(), point); + ui::Layer::ConvertPointToLayer(source->layer_, target->layer_, point); } } @@ -744,17 +839,32 @@ void Window::SetBoundsInternal(const gfx::Rect& new_bounds) { // Always need to set the layer's bounds -- even if it is to the same thing. // This may cause important side effects such as stopping animation. - layer_->SetBounds(actual_new_bounds); + if (!layer_) { + const gfx::Vector2d origin_delta = new_bounds.OffsetFromOrigin() - + bounds_.OffsetFromOrigin(); + bounds_ = new_bounds; + OffsetLayerBounds(origin_delta); + } else { + if (parent_ && !parent_->layer_) { + gfx::Vector2d offset; + const aura::Window* ancestor_with_layer = + parent_->GetAncestorWithLayer(&offset); + if (ancestor_with_layer) + actual_new_bounds.Offset(offset); + } + layer_->SetBounds(actual_new_bounds); + } // If we are currently not the layer's delegate, we will not get bounds // changed notification from the layer (this typically happens after animating // hidden). We must notify ourselves. - if (layer_->delegate() != this) - OnLayerBoundsChanged(old_bounds, ContainsMouse()); + if (!layer_ || layer_->delegate() != this) + OnWindowBoundsChanged(old_bounds, ContainsMouse()); } void Window::SetVisible(bool visible) { - if (visible == layer_->GetTargetVisibility()) + if ((layer_ && visible == layer_->GetTargetVisibility()) || + (!layer_ && visible == visible_)) return; // No change. FOR_EACH_OBSERVER(WindowObserver, observers_, @@ -768,7 +878,7 @@ void Window::SetVisible(bool visible) { client::GetVisibilityClient(this); if (visibility_client) visibility_client->UpdateLayerVisibility(this, visible); - else + else if (layer_) layer_->SetVisible(visible); visible_ = visible; SchedulePaint(); @@ -788,6 +898,25 @@ void Window::SchedulePaint() { SchedulePaintInRect(gfx::Rect(0, 0, bounds().width(), bounds().height())); } +void Window::Paint(gfx::Canvas* canvas) { + if (delegate_) + delegate_->OnPaint(canvas); + PaintLayerlessChildren(canvas); +} + +void Window::PaintLayerlessChildren(gfx::Canvas* canvas) { + for (size_t i = 0, count = children_.size(); i < count; ++i) { + Window* child = children_[i]; + if (!child->layer_ && child->visible_) { + gfx::ScopedCanvas scoped_canvas(canvas); + if (canvas->ClipRect(child->bounds())) { + canvas->Translate(child->bounds().OffsetFromOrigin()); + child->Paint(canvas); + } + } + } +} + Window* Window::GetWindowForPoint(const gfx::Point& local_point, bool return_tightest, bool for_event_handling) { @@ -827,9 +956,8 @@ Window* Window::GetWindowForPoint(const gfx::Point& local_point, if (client && !client->CanProcessEventsWithinSubtree(child)) continue; if (delegate_ && !delegate_->ShouldDescendIntoChildForEventHandling( - child, local_point)) { + child, local_point)) continue; - } } gfx::Point point_in_child_coords(local_point); @@ -855,12 +983,11 @@ void Window::RemoveChildImpl(Window* child, Window* new_parent) { child, new_root_window); child->NotifyRemovingFromRootWindow(); } + + gfx::Vector2d offset; + GetAncestorWithLayer(&offset); + child->UnparentLayers(!layer_, offset); child->parent_ = NULL; - // We should only remove the child's layer if the child still owns that layer. - // Someone else may have acquired ownership of it via AcquireLayer() and may - // expect the hierarchy to go unchanged as the Window is destroyed. - if (child->layer_owner_) - layer_->Remove(child->layer_); Windows::iterator i = std::find(children_.begin(), children_.end(), child); DCHECK(i != children_.end()); children_.erase(i); @@ -869,6 +996,60 @@ void Window::RemoveChildImpl(Window* child, Window* new_parent) { layout_manager_->OnWindowRemovedFromLayout(child); } +void Window::UnparentLayers(bool has_layerless_ancestor, + const gfx::Vector2d& offset) { + if (!layer_) { + const gfx::Vector2d new_offset = offset + bounds().OffsetFromOrigin(); + for (size_t i = 0; i < children_.size(); ++i) { + children_[i]->UnparentLayers(true, new_offset); + } + } else { + // Only remove the layer if we still own it. Someone else may have acquired + // ownership of it via AcquireLayer() and may expect the hierarchy to go + // unchanged as the Window is destroyed. + if (layer_owner_) { + if (layer_->parent()) + layer_->parent()->Remove(layer_); + if (has_layerless_ancestor) { + const gfx::Rect real_bounds(bounds_); + gfx::Rect layer_bounds(layer_->bounds()); + layer_bounds.Offset(-offset); + layer_->SetBounds(layer_bounds); + bounds_ = real_bounds; + } + } + } +} + +void Window::ReparentLayers(ui::Layer* parent_layer, + const gfx::Vector2d& offset) { + if (!layer_) { + for (size_t i = 0; i < children_.size(); ++i) { + children_[i]->ReparentLayers( + parent_layer, + offset + children_[i]->bounds().OffsetFromOrigin()); + } + } else { + const gfx::Rect real_bounds(bounds()); + parent_layer->Add(layer_); + gfx::Rect layer_bounds(layer_->bounds().size()); + layer_bounds += offset; + layer_->SetBounds(layer_bounds); + bounds_ = real_bounds; + } +} + +void Window::OffsetLayerBounds(const gfx::Vector2d& offset) { + if (!layer_) { + for (size_t i = 0; i < children_.size(); ++i) + children_[i]->OffsetLayerBounds(offset); + } else { + gfx::Rect layer_bounds(layer_->bounds()); + layer_bounds += offset; + layer_->SetBounds(layer_bounds); + } +} + void Window::OnParentChanged() { FOR_EACH_OBSERVER( WindowObserver, observers_, OnWindowParentChanged(this, parent_)); @@ -947,7 +1128,7 @@ void Window::StackChildRelativeTo(Window* child, // for an explanation of this. while (final_target_i > 0 && children_[direction == STACK_ABOVE ? final_target_i : - final_target_i - 1]->layer() + final_target_i - 1]->layer_ ->delegate() == NULL) { --final_target_i; } @@ -955,7 +1136,7 @@ void Window::StackChildRelativeTo(Window* child, Window* final_target = children_[final_target_i]; // If we couldn't find a valid target position, don't move anything. - if (direction == STACK_ABOVE && final_target->layer()->delegate() == NULL) + if (direction == STACK_ABOVE && final_target->layer_->delegate() == NULL) return; // Don't try to stack a child above itself. @@ -1007,9 +1188,9 @@ void Window::StackChildRelativeToImpl(Window* child, children_.insert(children_.begin() + dest_i, child); if (direction == STACK_ABOVE) - layer()->StackAbove(child->layer(), target->layer()); + layer_->StackAbove(child->layer_, target->layer_); else - layer()->StackBelow(child->layer(), target->layer()); + layer_->StackBelow(child->layer_, target->layer_); child->OnStackingChanged(); } @@ -1140,8 +1321,19 @@ void Window::NotifyWindowVisibilityChangedUp(aura::Window* target, } } -void Window::OnLayerBoundsChanged(const gfx::Rect& old_bounds, - bool contained_mouse) { +void Window::OnWindowBoundsChanged(const gfx::Rect& old_bounds, + bool contained_mouse) { + if (layer_) { + bounds_ = layer_->bounds(); + if (parent_ && !parent_->layer_) { + gfx::Vector2d offset; + aura::Window* ancestor_with_layer = + parent_->GetAncestorWithLayer(&offset); + if (ancestor_with_layer) + bounds_.Offset(-offset); + } + } + if (layout_manager_) layout_manager_->OnWindowResized(); if (delegate_) @@ -1155,12 +1347,11 @@ void Window::OnLayerBoundsChanged(const gfx::Rect& old_bounds, } void Window::OnPaintLayer(gfx::Canvas* canvas) { - if (delegate_) - delegate_->OnPaint(canvas); + Paint(canvas); } base::Closure Window::PrepareForLayerBoundsChange() { - return base::Bind(&Window::OnLayerBoundsChanged, base::Unretained(this), + return base::Bind(&Window::OnWindowBoundsChanged, base::Unretained(this), bounds(), ContainsMouse()); } @@ -1199,9 +1390,24 @@ ui::EventTarget* Window::GetParentTarget() { return parent_; } +scoped_ptr<ui::EventTargetIterator> Window::GetChildIterator() const { + return scoped_ptr<ui::EventTargetIterator>( + new ui::EventTargetIteratorImpl<Window>(children())); +} + +ui::EventTargeter* Window::GetEventTargeter() { + return targeter_.get(); +} + +void Window::ConvertEventToTarget(ui::EventTarget* target, + ui::LocatedEvent* event) { + event->ConvertLocationToTarget(this, + static_cast<Window*>(target)); +} + void Window::UpdateLayerName(const std::string& name) { #if !defined(NDEBUG) - DCHECK(layer()); + DCHECK(layer_); std::string layer_name(name_); if (layer_name.empty()) @@ -1212,7 +1418,7 @@ void Window::UpdateLayerName(const std::string& name) { base::snprintf(id_buf, sizeof(id_buf), " %d", id_); layer_name.append(id_buf); } - layer()->set_name(layer_name); + layer_->set_name(layer_name); #endif } @@ -1226,4 +1432,14 @@ bool Window::ContainsMouse() { return contains_mouse; } +const Window* Window::GetAncestorWithLayer(gfx::Vector2d* offset) const { + for (const aura::Window* window = this; window; window = window->parent()) { + if (window->layer_) + return window; + *offset += window->bounds().OffsetFromOrigin(); + } + *offset = gfx::Vector2d(); + return NULL; +} + } // namespace aura diff --git a/ui/aura/window.h b/ui/aura/window.h index ea3846109e..c104ae5544 100644 --- a/ui/aura/window.h +++ b/ui/aura/window.h @@ -16,6 +16,7 @@ #include "base/strings/string16.h" #include "ui/aura/aura_export.h" #include "ui/aura/client/window_types.h" +#include "ui/aura/window_layer_type.h" #include "ui/aura/window_observer.h" #include "ui/compositor/layer_animator.h" #include "ui/compositor/layer_delegate.h" @@ -23,6 +24,7 @@ #include "ui/compositor/layer_type.h" #include "ui/events/event_constants.h" #include "ui/events/event_target.h" +#include "ui/events/event_targeter.h" #include "ui/events/gestures/gesture_types.h" #include "ui/gfx/insets.h" #include "ui/gfx/native_widget_types.h" @@ -31,6 +33,7 @@ namespace gfx { class Display; class Transform; +class Vector2d; } namespace ui { @@ -73,6 +76,9 @@ class AURA_EXPORT Window : public ui::LayerDelegate, // Initializes the window. This creates the window's layer. void Init(ui::LayerType layer_type); + // TODO(sky): replace other Init() with this once m32 is more baked. + void InitWithWindowLayerType(WindowLayerType layer_type); + // Creates a new layer for the window. Erases the layer-owned bounds, so the // caller may wish to set new bounds and other state on the window/layer. // Returns the old layer, which can be used for animations. Caller owns the @@ -106,7 +112,7 @@ class AURA_EXPORT Window : public ui::LayerDelegate, WindowDelegate* delegate() { return delegate_; } const WindowDelegate* delegate() const { return delegate_; } - const gfx::Rect& bounds() const; + const gfx::Rect& bounds() const { return bounds_; } Window* parent() { return parent_; } const Window* parent() const { return parent_; } @@ -155,6 +161,10 @@ class AURA_EXPORT Window : public ui::LayerDelegate, void SetLayoutManager(LayoutManager* layout_manager); LayoutManager* layout_manager() { return layout_manager_.get(); } + void set_event_targeter(scoped_ptr<ui::EventTargeter> targeter) { + targeter_ = targeter.Pass(); + } + // Changes the bounds of the window. If present, the window's parent's // LayoutManager may adjust the bounds. void SetBounds(const gfx::Rect& new_bounds); @@ -241,6 +251,7 @@ class AURA_EXPORT Window : public ui::LayerDelegate, bool HasObserver(WindowObserver* observer); void set_ignore_events(bool ignore_events) { ignore_events_ = ignore_events; } + bool ignore_events() const { return ignore_events_; } // Sets the window to grab hits for mouse and touch to an area extending // -|mouse_insets| and -|touch_insets| pixels outside its bounds. This can be @@ -366,6 +377,7 @@ class AURA_EXPORT Window : public ui::LayerDelegate, private: friend class test::WindowTestApi; friend class LayoutManager; + friend class WindowTargeter; friend class RootWindow; // Used when stacking windows. @@ -392,6 +404,13 @@ class AURA_EXPORT Window : public ui::LayerDelegate, // Schedules a paint for the Window's entire bounds. void SchedulePaint(); + // Asks the delegate to paint the window and invokes PaintLayerlessChildren() + // to paint any children with no layers. + void Paint(gfx::Canvas* canvas); + + // Paints any layerless children to |canvas|. + void PaintLayerlessChildren(gfx::Canvas* canvas); + // Gets a Window (either this one or a subwindow) containing |local_point|. // If |return_tightest| is true, returns the tightest-containing (i.e. // furthest down the hierarchy) Window containing the point; otherwise, @@ -406,6 +425,22 @@ class AURA_EXPORT Window : public ui::LayerDelegate, // to. void RemoveChildImpl(Window* child, Window* new_parent); + // If this Window has a layer the layer's parent is set to NULL, otherwise + // UnparentLayers() is invoked on all the children. |offset| is the offset + // relative to the nearest ancestor with a layer. + void UnparentLayers(bool has_layerless_ancestor, + const gfx::Vector2d& offset); + + // If this Window has a layer it is added to |parent| and the origin set to + // |offset|. Otherwise this recurses through the children invoking + // ReparentLayers(). The net effect is both setting the parent of layers to + // |parent| as well as updating bounds of windows with a layerless ancestor. + void ReparentLayers(ui::Layer* parent, const gfx::Vector2d& offset); + + // Offsets the first encountered Windows with layers by |offset|. This + // recurses through all layerless Windows, stopping at windows with layers. + void OffsetLayerBounds(const gfx::Vector2d& offset); + // Called when this window's parent has changed. void OnParentChanged(); @@ -468,11 +503,12 @@ class AURA_EXPORT Window : public ui::LayerDelegate, // Notifies this window and its parent hierarchy. void NotifyWindowVisibilityChangedUp(aura::Window* target, bool visible); - // Invoked from the closure returned by PrepareForLayerBoundsChange() after - // the bounds of the layer has changed. |old_bounds| is the previous bounds of - // the layer, and |contained_mouse| is true if the mouse was previously within - // the window's bounds. - void OnLayerBoundsChanged(const gfx::Rect& old_bounds, bool contained_mouse); + // Invoked when the bounds of the window changes. This may be invoked directly + // by us, or from the closure returned by PrepareForLayerBoundsChange() after + // the bounds of the layer has changed. |old_bounds| is the previous bounds, + // and |contained_mouse| is true if the mouse was previously within the + // window's bounds. + void OnWindowBoundsChanged(const gfx::Rect& old_bounds, bool contained_mouse); // Overridden from ui::LayerDelegate: virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE; @@ -481,6 +517,10 @@ class AURA_EXPORT Window : public ui::LayerDelegate, // Overridden from ui::EventTarget: virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE; virtual EventTarget* GetParentTarget() OVERRIDE; + virtual scoped_ptr<ui::EventTargetIterator> GetChildIterator() const OVERRIDE; + virtual ui::EventTargeter* GetEventTargeter() OVERRIDE; + virtual void ConvertEventToTarget(ui::EventTarget* target, + ui::LocatedEvent* event) OVERRIDE; // Updates the layer name with a name based on the window's name and id. void UpdateLayerName(const std::string& name); @@ -488,6 +528,20 @@ class AURA_EXPORT Window : public ui::LayerDelegate, // Returns true if the mouse is currently within our bounds. bool ContainsMouse(); + // Returns the first ancestor (starting at |this|) with a layer. |offset| is + // set to the offset from |this| to the first ancestor with a layer. + Window* GetAncestorWithLayer(gfx::Vector2d* offset) { + return const_cast<Window*>( + const_cast<const Window*>(this)->GetAncestorWithLayer(offset)); + } + const Window* GetAncestorWithLayer(gfx::Vector2d* offset) const; + + // Bounds of this window relative to the parent. This is cached as the bounds + // of the Layer and Window are not necessarily the same. In particular bounds + // of the Layer are relative to the first ancestor with a Layer, where as this + // is relative to the parent Window. + gfx::Rect bounds_; + WindowEventDispatcher* dispatcher_; client::WindowType type_; @@ -524,6 +578,7 @@ class AURA_EXPORT Window : public ui::LayerDelegate, scoped_ptr<ui::EventHandler> event_filter_; scoped_ptr<LayoutManager> layout_manager_; + scoped_ptr<ui::EventTargeter> targeter_; void* user_data_; @@ -535,7 +590,7 @@ class AURA_EXPORT Window : public ui::LayerDelegate, gfx::Insets hit_test_bounds_override_outer_touch_; gfx::Insets hit_test_bounds_override_inner_; - ObserverList<WindowObserver> observers_; + ObserverList<WindowObserver, true> observers_; // Value struct to keep the name and deallocator for this property. // Key cannot be used for this purpose because it can be char* or diff --git a/ui/aura/window_layer_type.h b/ui/aura/window_layer_type.h new file mode 100644 index 0000000000..97e312a3ee --- /dev/null +++ b/ui/aura/window_layer_type.h @@ -0,0 +1,24 @@ +// Copyright (c) 2012 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. + +#ifndef UI_AURA_WINDOW_LAYER_TYPE_H_ +#define UI_AURA_WINDOW_LAYER_TYPE_H_ + +namespace aura { + +// These constants mirror that of ui::LayerType with the addition of +// WINDOW_LAYER_NONE. See ui::LayerType for description of ones in common. +enum WindowLayerType { + // Note that Windows with WINDOW_LAYER_NONE impose limitations on the + // Window: transforms and animations aren't supported. + WINDOW_LAYER_NONE, + + WINDOW_LAYER_NOT_DRAWN, + WINDOW_LAYER_TEXTURED, + WINDOW_LAYER_SOLID_COLOR, +}; + +} // namespace aura + +#endif // UI_AURA_WINDOW_LAYER_TYPE_H_ diff --git a/ui/aura/window_observer.h b/ui/aura/window_observer.h index 5008ac514d..9408ee831d 100644 --- a/ui/aura/window_observer.h +++ b/ui/aura/window_observer.h @@ -87,8 +87,14 @@ class AURA_EXPORT WindowObserver { // destructor). This is called before the window is removed from its parent. virtual void OnWindowDestroying(Window* window) {} - // Invoked when the Window has been destroyed (i.e. at the end of its - // destructor). This is called after the window is removed from its parent. + // Invoked when the Window has been destroyed (i.e. at the end of + // its destructor). This is called after the window is removed from + // its parent. Window automatically removes its WindowObservers + // before calling this method, so the following code is no op. + // + // void MyWindowObserver::OnWindowDestroyed(aura::Window* window) { + // window->RemoveObserver(this); + // } virtual void OnWindowDestroyed(Window* window) {} // Called when a Window has been added to a RootWindow. diff --git a/ui/aura/window_targeter.cc b/ui/aura/window_targeter.cc new file mode 100644 index 0000000000..767a79dbbd --- /dev/null +++ b/ui/aura/window_targeter.cc @@ -0,0 +1,59 @@ +// 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. + +#include "ui/aura/window_targeter.h" + +#include "ui/aura/client/event_client.h" +#include "ui/aura/client/focus_client.h" +#include "ui/aura/window.h" +#include "ui/aura/window_delegate.h" +#include "ui/events/event_target.h" + +namespace aura { + +WindowTargeter::WindowTargeter() {} +WindowTargeter::~WindowTargeter() {} + +ui::EventTarget* WindowTargeter::FindTargetForEvent(ui::EventTarget* root, + ui::Event* event) { + if (event->IsKeyEvent()) { + Window* window = static_cast<Window*>(root); + Window* root_window = window->GetRootWindow(); + const ui::KeyEvent& key = static_cast<const ui::KeyEvent&>(*event); + if (key.key_code() == ui::VKEY_UNKNOWN) + return NULL; + client::EventClient* event_client = client::GetEventClient(root_window); + client::FocusClient* focus_client = client::GetFocusClient(root_window); + Window* focused_window = focus_client->GetFocusedWindow(); + if (event_client && + !event_client->CanProcessEventsWithinSubtree(focused_window)) { + focus_client->FocusWindow(NULL); + return NULL; + } + return focused_window ? focused_window : window; + } + return EventTargeter::FindTargetForEvent(root, event); +} + +bool WindowTargeter::SubtreeShouldBeExploredForEvent( + ui::EventTarget* root, + const ui::LocatedEvent& event) { + Window* window = static_cast<Window*>(root); + if (!window->IsVisible()) + return false; + if (window->ignore_events()) + return false; + client::EventClient* client = client::GetEventClient(window->GetRootWindow()); + if (client && !client->CanProcessEventsWithinSubtree(window)) + return false; + + Window* parent = window->parent(); + if (parent && parent->delegate_ && !parent->delegate_-> + ShouldDescendIntoChildForEventHandling(window, event.location())) { + return false; + } + return window->bounds().Contains(event.location()); +} + +} // namespace aura diff --git a/ui/aura/window_targeter.h b/ui/aura/window_targeter.h new file mode 100644 index 0000000000..ba69ed8881 --- /dev/null +++ b/ui/aura/window_targeter.h @@ -0,0 +1,25 @@ +// 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. + +#include "ui/events/event_targeter.h" + +namespace aura { + +class WindowTargeter : public ui::EventTargeter { + public: + WindowTargeter(); + virtual ~WindowTargeter(); + + protected: + // ui::EventTargeter: + virtual ui::EventTarget* FindTargetForEvent(ui::EventTarget* root, + ui::Event* event) OVERRIDE; + virtual bool SubtreeShouldBeExploredForEvent( + ui::EventTarget* target, + const ui::LocatedEvent& event) OVERRIDE; + + DISALLOW_COPY_AND_ASSIGN(WindowTargeter); +}; + +} // namespace aura diff --git a/ui/aura/window_targeter_unittest.cc b/ui/aura/window_targeter_unittest.cc new file mode 100644 index 0000000000..396c805353 --- /dev/null +++ b/ui/aura/window_targeter_unittest.cc @@ -0,0 +1,54 @@ +// 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. + +#include "ui/aura/window_targeter.h" + +#include "ui/aura/test/aura_test_base.h" +#include "ui/aura/test/test_event_handler.h" +#include "ui/aura/test/test_window_delegate.h" +#include "ui/aura/window.h" + +namespace aura { + +class WindowTargeterTest : public test::AuraTestBase { + public: + WindowTargeterTest() {} + virtual ~WindowTargeterTest() {} + + Window* root_window() { return AuraTestBase::root_window(); } +}; + +TEST_F(WindowTargeterTest, Basic) { + test::TestWindowDelegate delegate; + scoped_ptr<Window> window(CreateNormalWindow(1, root_window(), &delegate)); + Window* one = CreateNormalWindow(2, window.get(), &delegate); + Window* two = CreateNormalWindow(3, window.get(), &delegate); + + window->SetBounds(gfx::Rect(0, 0, 100, 100)); + one->SetBounds(gfx::Rect(0, 0, 500, 100)); + two->SetBounds(gfx::Rect(501, 0, 500, 1000)); + + root_window()->Show(); + + test::TestEventHandler handler; + one->AddPreTargetHandler(&handler); + + ui::MouseEvent press(ui::ET_MOUSE_PRESSED, + gfx::Point(20, 20), + gfx::Point(20, 20), + ui::EF_NONE); + root_window()->GetDispatcher()->AsRootWindowHostDelegate()-> + OnHostMouseEvent(&press); + EXPECT_EQ(1, handler.num_mouse_events()); + + handler.Reset(); + ui::EventDispatchDetails details = + root_window()->GetDispatcher()->OnEventFromSource(&press); + EXPECT_FALSE(details.dispatcher_destroyed); + EXPECT_EQ(1, handler.num_mouse_events()); + + one->RemovePreTargetHandler(&handler); +} + +} // namespace aura diff --git a/ui/aura/window_tree_host_delegate.h b/ui/aura/window_tree_host_delegate.h index fc40a1fae5..ad08039d62 100644 --- a/ui/aura/window_tree_host_delegate.h +++ b/ui/aura/window_tree_host_delegate.h @@ -15,6 +15,7 @@ class Size; namespace ui { class Event; +class EventProcessor; class KeyEvent; class MouseEvent; class ScrollEvent; @@ -55,6 +56,8 @@ class AURA_EXPORT RootWindowHostDelegate { virtual RootWindow* AsRootWindow() = 0; virtual const RootWindow* AsRootWindow() const = 0; + virtual ui::EventProcessor* GetEventProcessor() = 0; + protected: virtual ~RootWindowHostDelegate() {} }; diff --git a/ui/aura/window_unittest.cc b/ui/aura/window_unittest.cc index 4ab711099d..c8b89cf778 100644 --- a/ui/aura/window_unittest.cc +++ b/ui/aura/window_unittest.cc @@ -40,6 +40,8 @@ #include "ui/events/keycodes/keyboard_codes.h" #include "ui/gfx/canvas.h" #include "ui/gfx/screen.h" +#include "ui/gfx/skia_util.h" +#include "ui/gfx/vector2d.h" DECLARE_WINDOW_PROPERTY_TYPE(const char*) DECLARE_WINDOW_PROPERTY_TYPE(int) @@ -2879,7 +2881,7 @@ TEST_F(WindowTest, DelegateNotifiedAsBoundsChangeInHiddenLayer) { // No bounds changed notification at the end of animation since layer // delegate is NULL. EXPECT_FALSE(delegate.bounds_changed()); - EXPECT_NE("0,0 100x100", window->bounds().ToString()); + EXPECT_NE("0,0 100x100", window->layer()->bounds().ToString()); } namespace { @@ -3185,5 +3187,370 @@ TEST_F(WindowTest, NotifyDelegateAfterDeletingTransients) { EXPECT_EQ("parent", destruction_order[1]); } +// Verifies SchedulePaint() on a layerless window results in damaging the right +// thing. +TEST_F(WindowTest, LayerlessWindowSchedulePaint) { + Window root(NULL); + root.Init(ui::LAYER_NOT_DRAWN); + root.SetBounds(gfx::Rect(0, 0, 100, 100)); + + Window* layerless_window = new Window(NULL); // Owned by |root|. + layerless_window->InitWithWindowLayerType(WINDOW_LAYER_NONE); + layerless_window->SetBounds(gfx::Rect(10, 11, 12, 13)); + root.AddChild(layerless_window); + + root.layer()->SendDamagedRects(); + layerless_window->SchedulePaintInRect(gfx::Rect(1, 2, 100, 4)); + // Note the the region is clipped by the parent hence 100 going to 11. + EXPECT_EQ("11,13 11x4", + gfx::SkIRectToRect(root.layer()->damaged_region().getBounds()). + ToString()); + + Window* layerless_window2 = new Window(NULL); // Owned by |layerless_window|. + layerless_window2->InitWithWindowLayerType(WINDOW_LAYER_NONE); + layerless_window2->SetBounds(gfx::Rect(1, 2, 3, 4)); + layerless_window->AddChild(layerless_window2); + + root.layer()->SendDamagedRects(); + layerless_window2->SchedulePaintInRect(gfx::Rect(1, 2, 100, 4)); + // Note the the region is clipped by the |layerless_window| hence 100 going to + // 2. + EXPECT_EQ("12,15 2x2", + gfx::SkIRectToRect(root.layer()->damaged_region().getBounds()). + ToString()); +} + +// Verifies bounds of layerless windows are correctly updated when adding +// removing. +TEST_F(WindowTest, NestedLayerlessWindowsBoundsOnAddRemove) { + // Creates the following structure (all children owned by root): + // root + // w1ll 1,2 + // w11ll 3,4 + // w111 5,6 + // w12 7,8 + // w121 9,10 + // + // ll: layer less, eg no layer + Window root(NULL); + root.InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN); + root.SetBounds(gfx::Rect(0, 0, 100, 100)); + + Window* w1ll = new Window(NULL); + w1ll->InitWithWindowLayerType(WINDOW_LAYER_NONE); + w1ll->SetBounds(gfx::Rect(1, 2, 100, 100)); + + Window* w11ll = new Window(NULL); + w11ll->InitWithWindowLayerType(WINDOW_LAYER_NONE); + w11ll->SetBounds(gfx::Rect(3, 4, 100, 100)); + w1ll->AddChild(w11ll); + + Window* w111 = new Window(NULL); + w111->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN); + w111->SetBounds(gfx::Rect(5, 6, 100, 100)); + w11ll->AddChild(w111); + + Window* w12 = new Window(NULL); + w12->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN); + w12->SetBounds(gfx::Rect(7, 8, 100, 100)); + w1ll->AddChild(w12); + + Window* w121 = new Window(NULL); + w121->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN); + w121->SetBounds(gfx::Rect(9, 10, 100, 100)); + w12->AddChild(w121); + + root.AddChild(w1ll); + + // All layers should be parented to the root. + EXPECT_EQ(root.layer(), w111->layer()->parent()); + EXPECT_EQ(root.layer(), w12->layer()->parent()); + EXPECT_EQ(w12->layer(), w121->layer()->parent()); + + // Ensure bounds are what we expect. + EXPECT_EQ("1,2 100x100", w1ll->bounds().ToString()); + EXPECT_EQ("3,4 100x100", w11ll->bounds().ToString()); + EXPECT_EQ("5,6 100x100", w111->bounds().ToString()); + EXPECT_EQ("7,8 100x100", w12->bounds().ToString()); + EXPECT_EQ("9,10 100x100", w121->bounds().ToString()); + + // Bounds of layers are relative to the nearest ancestor with a layer. + EXPECT_EQ("8,10 100x100", w12->layer()->bounds().ToString()); + EXPECT_EQ("9,12 100x100", w111->layer()->bounds().ToString()); + EXPECT_EQ("9,10 100x100", w121->layer()->bounds().ToString()); + + // Remove and repeat. + root.RemoveChild(w1ll); + + EXPECT_TRUE(w111->layer()->parent() == NULL); + EXPECT_TRUE(w12->layer()->parent() == NULL); + + // Verify bounds haven't changed again. + EXPECT_EQ("1,2 100x100", w1ll->bounds().ToString()); + EXPECT_EQ("3,4 100x100", w11ll->bounds().ToString()); + EXPECT_EQ("5,6 100x100", w111->bounds().ToString()); + EXPECT_EQ("7,8 100x100", w12->bounds().ToString()); + EXPECT_EQ("9,10 100x100", w121->bounds().ToString()); + + // Bounds of layers should now match that of windows. + EXPECT_EQ("7,8 100x100", w12->layer()->bounds().ToString()); + EXPECT_EQ("5,6 100x100", w111->layer()->bounds().ToString()); + EXPECT_EQ("9,10 100x100", w121->layer()->bounds().ToString()); + + delete w1ll; +} + +// Verifies bounds of layerless windows are correctly updated when bounds +// of ancestor changes. +TEST_F(WindowTest, NestedLayerlessWindowsBoundsOnSetBounds) { + // Creates the following structure (all children owned by root): + // root + // w1ll 1,2 + // w11ll 3,4 + // w111 5,6 + // w12 7,8 + // w121 9,10 + // + // ll: layer less, eg no layer + Window root(NULL); + root.InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN); + root.SetBounds(gfx::Rect(0, 0, 100, 100)); + + Window* w1ll = new Window(NULL); + w1ll->InitWithWindowLayerType(WINDOW_LAYER_NONE); + w1ll->SetBounds(gfx::Rect(1, 2, 100, 100)); + + Window* w11ll = new Window(NULL); + w11ll->InitWithWindowLayerType(WINDOW_LAYER_NONE); + w11ll->SetBounds(gfx::Rect(3, 4, 100, 100)); + w1ll->AddChild(w11ll); + + Window* w111 = new Window(NULL); + w111->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN); + w111->SetBounds(gfx::Rect(5, 6, 100, 100)); + w11ll->AddChild(w111); + + Window* w12 = new Window(NULL); + w12->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN); + w12->SetBounds(gfx::Rect(7, 8, 100, 100)); + w1ll->AddChild(w12); + + Window* w121 = new Window(NULL); + w121->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN); + w121->SetBounds(gfx::Rect(9, 10, 100, 100)); + w12->AddChild(w121); + + root.AddChild(w1ll); + + w111->SetBounds(gfx::Rect(7, 8, 11, 12)); + EXPECT_EQ("7,8 11x12", w111->bounds().ToString()); + EXPECT_EQ("7,8 11x12", w111->GetTargetBounds().ToString()); + EXPECT_EQ("11,14 11x12", w111->layer()->bounds().ToString()); + + // Set back. + w111->SetBounds(gfx::Rect(5, 6, 100, 100)); + EXPECT_EQ("5,6 100x100", w111->bounds().ToString()); + EXPECT_EQ("5,6 100x100", w111->GetTargetBounds().ToString()); + EXPECT_EQ("9,12 100x100", w111->layer()->bounds().ToString()); + + // Setting the bounds of a layerless window needs to adjust the bounds of + // layered children. + w11ll->SetBounds(gfx::Rect(5, 6, 100, 100)); + EXPECT_EQ("5,6 100x100", w11ll->bounds().ToString()); + EXPECT_EQ("5,6 100x100", w11ll->GetTargetBounds().ToString()); + EXPECT_EQ("5,6 100x100", w111->bounds().ToString()); + EXPECT_EQ("5,6 100x100", w111->GetTargetBounds().ToString()); + EXPECT_EQ("11,14 100x100", w111->layer()->bounds().ToString()); + + root.RemoveChild(w1ll); + + w111->SetBounds(gfx::Rect(7, 8, 11, 12)); + EXPECT_EQ("7,8 11x12", w111->bounds().ToString()); + EXPECT_EQ("7,8 11x12", w111->GetTargetBounds().ToString()); + EXPECT_EQ("7,8 11x12", w111->layer()->bounds().ToString()); + + delete w1ll; +} + +namespace { + +// Tracks the number of times paint is invoked along with what the clip and +// translate was. +class PaintWindowDelegate : public TestWindowDelegate { + public: + PaintWindowDelegate() : paint_count_(0) {} + virtual ~PaintWindowDelegate() {} + + const gfx::Rect& most_recent_paint_clip_bounds() const { + return most_recent_paint_clip_bounds_; + } + + const gfx::Vector2d& most_recent_paint_matrix_offset() const { + return most_recent_paint_matrix_offset_; + } + + void clear_paint_count() { paint_count_ = 0; } + int paint_count() const { return paint_count_; } + + // TestWindowDelegate:: + virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { + paint_count_++; + canvas->GetClipBounds(&most_recent_paint_clip_bounds_); + const SkMatrix& matrix = canvas->sk_canvas()->getTotalMatrix(); + most_recent_paint_matrix_offset_ = gfx::Vector2d( + SkScalarFloorToInt(matrix.getTranslateX()), + SkScalarFloorToInt(matrix.getTranslateY())); + } + + private: + int paint_count_; + gfx::Rect most_recent_paint_clip_bounds_; + gfx::Vector2d most_recent_paint_matrix_offset_; + + DISALLOW_COPY_AND_ASSIGN(PaintWindowDelegate); +}; + +} // namespace + +// Assertions around layerless children being painted when non-layerless window +// is painted. +TEST_F(WindowTest, PaintLayerless) { + // Creates the following structure (all children owned by root): + // root + // w1ll 1,2 40x50 + // w11ll 3,4 11x12 + // w111 5,6 + // + // ll: layer less, eg no layer + PaintWindowDelegate w1ll_delegate; + PaintWindowDelegate w11ll_delegate; + PaintWindowDelegate w111_delegate; + + Window root(NULL); + root.InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN); + root.SetBounds(gfx::Rect(0, 0, 100, 100)); + + Window* w1ll = new Window(&w1ll_delegate); + w1ll->InitWithWindowLayerType(WINDOW_LAYER_NONE); + w1ll->SetBounds(gfx::Rect(1, 2, 40, 50)); + w1ll->Show(); + root.AddChild(w1ll); + + Window* w11ll = new Window(&w11ll_delegate); + w11ll->InitWithWindowLayerType(WINDOW_LAYER_NONE); + w11ll->SetBounds(gfx::Rect(3, 4, 11, 12)); + w11ll->Show(); + w1ll->AddChild(w11ll); + + Window* w111 = new Window(&w111_delegate); + w111->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN); + w111->SetBounds(gfx::Rect(5, 6, 100, 100)); + w111->Show(); + w11ll->AddChild(w111); + + EXPECT_EQ(0, w1ll_delegate.paint_count()); + EXPECT_EQ(0, w11ll_delegate.paint_count()); + EXPECT_EQ(0, w111_delegate.paint_count()); + + // Paint the root, this should trigger painting of the two layerless + // descendants but not the layered descendant. + gfx::Canvas canvas(gfx::Size(200, 200), 1.0f, true); + static_cast<ui::LayerDelegate&>(root).OnPaintLayer(&canvas); + + // NOTE: SkCanvas::getClipBounds() extends the clip 1 pixel to the left and up + // and 2 pixels down and to the right. + EXPECT_EQ(1, w1ll_delegate.paint_count()); + EXPECT_EQ("-1,-1 42x52", + w1ll_delegate.most_recent_paint_clip_bounds().ToString()); + EXPECT_EQ("[1 2]", + w1ll_delegate.most_recent_paint_matrix_offset().ToString()); + EXPECT_EQ(1, w11ll_delegate.paint_count()); + EXPECT_EQ("-1,-1 13x14", + w11ll_delegate.most_recent_paint_clip_bounds().ToString()); + EXPECT_EQ("[4 6]", + w11ll_delegate.most_recent_paint_matrix_offset().ToString()); + EXPECT_EQ(0, w111_delegate.paint_count()); +} + +namespace { + +std::string ConvertPointToTargetString(const Window* source, + const Window* target) { + gfx::Point location; + Window::ConvertPointToTarget(source, target, &location); + return location.ToString(); +} + +} // namespace + +// Assertions around Window::ConvertPointToTarget() with layerless windows. +TEST_F(WindowTest, ConvertPointToTargetLayerless) { + // Creates the following structure (all children owned by root): + // root + // w1ll 1,2 + // w11ll 3,4 + // w111 5,6 + // w12 7,8 + // w121 9,10 + // + // ll: layer less, eg no layer + Window root(NULL); + root.InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN); + root.SetBounds(gfx::Rect(0, 0, 100, 100)); + + Window* w1ll = new Window(NULL); + w1ll->InitWithWindowLayerType(WINDOW_LAYER_NONE); + w1ll->SetBounds(gfx::Rect(1, 2, 100, 100)); + + Window* w11ll = new Window(NULL); + w11ll->InitWithWindowLayerType(WINDOW_LAYER_NONE); + w11ll->SetBounds(gfx::Rect(3, 4, 100, 100)); + w1ll->AddChild(w11ll); + + Window* w111 = new Window(NULL); + w111->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN); + w111->SetBounds(gfx::Rect(5, 6, 100, 100)); + w11ll->AddChild(w111); + + Window* w12 = new Window(NULL); + w12->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN); + w12->SetBounds(gfx::Rect(7, 8, 100, 100)); + w1ll->AddChild(w12); + + Window* w121 = new Window(NULL); + w121->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN); + w121->SetBounds(gfx::Rect(9, 10, 100, 100)); + w12->AddChild(w121); + + root.AddChild(w1ll); + + // w111->w11ll + EXPECT_EQ("5,6", ConvertPointToTargetString(w111, w11ll)); + + // w111->w1ll + EXPECT_EQ("8,10", ConvertPointToTargetString(w111, w1ll)); + + // w111->root + EXPECT_EQ("9,12", ConvertPointToTargetString(w111, &root)); + + // w111->w12 + EXPECT_EQ("1,2", ConvertPointToTargetString(w111, w12)); + + // w111->w121 + EXPECT_EQ("-8,-8", ConvertPointToTargetString(w111, w121)); + + // w11ll->w111 + EXPECT_EQ("-5,-6", ConvertPointToTargetString(w11ll, w111)); + + // w11ll->w11ll + EXPECT_EQ("3,4", ConvertPointToTargetString(w11ll, w1ll)); + + // w11ll->root + EXPECT_EQ("4,6", ConvertPointToTargetString(w11ll, &root)); + + // w11ll->w12 + EXPECT_EQ("-4,-4", ConvertPointToTargetString(w11ll, w12)); +} + } // namespace test } // namespace aura diff --git a/ui/base/accelerators/menu_label_accelerator_util_linux.cc b/ui/base/accelerators/menu_label_accelerator_util_linux.cc index 21697ea1d6..0a00f82e09 100644 --- a/ui/base/accelerators/menu_label_accelerator_util_linux.cc +++ b/ui/base/accelerators/menu_label_accelerator_util_linux.cc @@ -55,7 +55,7 @@ std::string RemoveWindowsStyleAccelerators(const std::string& label) { // underscores doubled, making the string that appears to the user just |x|. std::string EscapeWindowsStyleAccelerators(const std::string& label) { std::string ret; - ReplaceChars(label, "&", "&&", &ret); + base::ReplaceChars(label, "&", "&&", &ret); return ret; } diff --git a/ui/base/accessibility/accessible_text_utils.cc b/ui/base/accessibility/accessible_text_utils.cc index 5fab22e120..a878b23d47 100644 --- a/ui/base/accessibility/accessible_text_utils.cc +++ b/ui/base/accessibility/accessible_text_utils.cc @@ -69,11 +69,13 @@ size_t FindAccessibleTextBoundary(const base::string16& text, case PARAGRAPH_BOUNDARY: if (text[pos] == '\n') return result; + break; case SENTENCE_BOUNDARY: if ((text[pos] == '.' || text[pos] == '!' || text[pos] == '?') && (pos == text_size - 1 || IsWhitespace(text[pos + 1]))) { return result; } + break; case ALL_BOUNDARY: default: break; diff --git a/ui/base/clipboard/clipboard.cc b/ui/base/clipboard/clipboard.cc index 0e25342d20..a77efd661e 100644 --- a/ui/base/clipboard/clipboard.cc +++ b/ui/base/clipboard/clipboard.cc @@ -18,61 +18,12 @@ namespace ui { namespace { -// Extracts the bitmap size from the passed in params. Since the renderer could -// send us bad data, explicitly copy the parameters to make sure we go through -// gfx::Size's sanity checks. -bool GetBitmapSizeFromParams(const Clipboard::ObjectMapParams& params, - gfx::Size* size) { - DCHECK(params.size() == 2); - if (params[1].size() != sizeof(gfx::Size)) - return false; - const gfx::Size* size_from_renderer = - reinterpret_cast<const gfx::Size*>(&(params[1].front())); - size->set_width(size_from_renderer->width()); - size->set_height(size_from_renderer->height()); - return true; -} - -// A compromised renderer could send us bad size data, so validate it to verify -// that calculating the number of bytes in the bitmap won't overflow a uint32. -// -// |size| - Clipboard bitmap size to validate. -// |bitmap_bytes| - On return contains the number of bytes needed to store -// the bitmap data or -1 if the data is invalid. -// returns: true if the bitmap size is valid, false otherwise. -bool IsBitmapSizeSane(const gfx::Size& size, uint32* bitmap_bytes) { - DCHECK_GE(size.width(), 0); - DCHECK_GE(size.height(), 0); - - *bitmap_bytes = -1; - uint32 total_size = size.width(); - // Limit size to max int so SkBitmap::getSize() calculation won't overflow. - // TODO(dcheng): Instead of all this custom validation, we should just use a - // combination of SkBitmap's setConfig() and getSize64() to detect this, e.g.: - // SkBitmap bitmap; - // if (!bitmap.setConfig(...)) - // return false; - // if (bitmap.getSize64().is64()) - // return false; - if (std::numeric_limits<int>::max() / size.width() <= size.height()) - return false; - total_size *= size.height(); - if (std::numeric_limits<int>::max() / total_size <= 4) - return false; - total_size *= 4; - *bitmap_bytes = total_size; - return true; -} - // Valides a shared bitmap on the clipboard. // Returns true if the clipboard data makes sense and it's safe to access the // bitmap. -bool ValidateAndMapSharedBitmap(const gfx::Size& size, +bool ValidateAndMapSharedBitmap(size_t bitmap_bytes, base::SharedMemory* bitmap_data) { using base::SharedMemory; - uint32 bitmap_bytes = -1; - if (!IsBitmapSizeSane(size, &bitmap_bytes)) - return false; if (!bitmap_data || !SharedMemory::IsHandleValid(bitmap_data->handle())) return false; @@ -84,19 +35,6 @@ bool ValidateAndMapSharedBitmap(const gfx::Size& size, return true; } -// Adopts a blob of bytes (assumed to be ARGB pixels) into a SkBitmap. Since the -// pixel data is not copied, the caller must ensure that |data| is valid as long -// as the SkBitmap is in use. Note that on little endian machines, each pixel is -// actually BGRA in memory. -SkBitmap AdoptBytesIntoSkBitmap(const void* data, const gfx::Size& size) { - SkBitmap bitmap; - bitmap.setConfig(SkBitmap::kARGB_8888_Config, size.width(), size.height()); - // Guaranteed not to overflow since it's been validated by IsBitmapSizeSane(). - DCHECK_EQ(4U * size.width(), bitmap.rowBytes()); - bitmap.setPixels(const_cast<void*>(data)); - return bitmap; -} - // A list of allowed threads. By default, this is empty and no thread checking // is done (in the unit test case), but a user (like content) can set which // threads are allowed to call this method. @@ -208,26 +146,38 @@ void Clipboard::DispatchObject(ObjectType type, const ObjectMapParams& params) { using base::SharedMemory; using base::SharedMemoryHandle; - if (params[0].size() != sizeof(SharedMemory*)) + if (params[0].size() != sizeof(SharedMemory*) || + params[1].size() != sizeof(gfx::Size)) { + return; + } + + SkBitmap bitmap; + const gfx::Size* unvalidated_size = + reinterpret_cast<const gfx::Size*>(¶ms[1].front()); + // Let Skia do some sanity checking for us (no negative widths/heights, no + // overflows while calculating bytes per row, etc). + if (!bitmap.setConfig(SkBitmap::kARGB_8888_Config, + unvalidated_size->width(), + unvalidated_size->height())) { + return; + } + // Make sure the size is representable as a signed 32-bit int, so + // SkBitmap::getSize() won't be truncated. + if (bitmap.getSize64().is64()) return; // It's OK to cast away constness here since we map the handle as // read-only. const char* raw_bitmap_data_const = - reinterpret_cast<const char*>(&(params[0].front())); + reinterpret_cast<const char*>(¶ms[0].front()); char* raw_bitmap_data = const_cast<char*>(raw_bitmap_data_const); scoped_ptr<SharedMemory> bitmap_data( *reinterpret_cast<SharedMemory**>(raw_bitmap_data)); - gfx::Size size; - if (!GetBitmapSizeFromParams(params, &size)) - return; - - if (!ValidateAndMapSharedBitmap(size, bitmap_data.get())) + if (!ValidateAndMapSharedBitmap(bitmap.getSize(), bitmap_data.get())) return; + bitmap.setPixels(bitmap_data->memory()); - const SkBitmap& bitmap = AdoptBytesIntoSkBitmap( - bitmap_data->memory(), size); WriteBitmap(bitmap); break; } diff --git a/ui/base/clipboard/clipboard.h b/ui/base/clipboard/clipboard.h index 27d005a9ee..d3fbbaa63a 100644 --- a/ui/base/clipboard/clipboard.h +++ b/ui/base/clipboard/clipboard.h @@ -213,9 +213,9 @@ class UI_EXPORT Clipboard : NON_EXPORTED_BASE(public base::ThreadChecker) { static void DestroyClipboardForCurrentThread(); // Write a bunch of objects to the system clipboard. Copies are made of the - // contents of |objects|. On Windows they are copied to the system clipboard. - // On linux they are copied into a structure owned by the Clipboard object and - // kept until the system clipboard is set again. + // contents of |objects|. + // Note: If you're thinking about calling this, you should probably be using + // ScopedClipboardWriter instead. void WriteObjects(ClipboardType type, const ObjectMap& objects); // Returns a sequence number which uniquely identifies clipboard state. @@ -230,11 +230,11 @@ class UI_EXPORT Clipboard : NON_EXPORTED_BASE(public base::ThreadChecker) { void Clear(ClipboardType type); void ReadAvailableTypes(ClipboardType type, - std::vector<string16>* types, + std::vector<base::string16>* types, bool* contains_filenames) const; // Reads UNICODE text from the clipboard, if available. - void ReadText(ClipboardType type, string16* result) const; + void ReadText(ClipboardType type, base::string16* result) const; // Reads ASCII text from the clipboard, if available. void ReadAsciiText(ClipboardType type, std::string* result) const; @@ -244,7 +244,7 @@ class UI_EXPORT Clipboard : NON_EXPORTED_BASE(public base::ThreadChecker) { // markup indicating the beginning and end of the actual fragment. Otherwise, // they will contain 0 and markup->size(). void ReadHTML(ClipboardType type, - string16* markup, + base::string16* markup, std::string* src_url, uint32* fragment_start, uint32* fragment_end) const; @@ -257,11 +257,11 @@ class UI_EXPORT Clipboard : NON_EXPORTED_BASE(public base::ThreadChecker) { SkBitmap ReadImage(ClipboardType type) const; void ReadCustomData(ClipboardType clipboard_type, - const string16& type, - string16* result) const; + const base::string16& type, + base::string16* result) const; // Reads a bookmark from the clipboard, if available. - void ReadBookmark(string16* title, std::string* url) const; + void ReadBookmark(base::string16* title, std::string* url) const; // Reads raw data from the clipboard with the given format type. Stores result // as a byte vector. @@ -346,8 +346,8 @@ class UI_EXPORT Clipboard : NON_EXPORTED_BASE(public base::ThreadChecker) { // Safely write to system clipboard. Free |handle| on failure. void WriteToClipboard(unsigned int format, HANDLE handle); - static void ParseBookmarkClipboardFormat(const string16& bookmark, - string16* title, + static void ParseBookmarkClipboardFormat(const base::string16& bookmark, + base::string16* title, std::string* url); // Free a handle depending on its type (as intuited from format) diff --git a/ui/base/clipboard/clipboard_android.cc b/ui/base/clipboard/clipboard_android.cc index fc9ba00bbb..f0971c448a 100644 --- a/ui/base/clipboard/clipboard_android.cc +++ b/ui/base/clipboard/clipboard_android.cc @@ -129,39 +129,50 @@ void ClipboardMap::Clear() { // If the internal map contains a plain-text entry and it does not match that // in the Android clipboard, clear the map and insert the Android text into it. +// If there is an HTML entry in the Android clipboard it gets inserted in the +// map. void ClipboardMap::SyncWithAndroidClipboard() { lock_.AssertAcquired(); JNIEnv* env = AttachCurrentThread(); + // Update the plain text clipboard entry std::map<std::string, std::string>::const_iterator it = map_.find(kPlainTextFormat); - - if (!Java_Clipboard_hasPlainText(env, clipboard_manager_.obj())) { - if (it != map_.end()) + ScopedJavaLocalRef<jstring> java_string_text = + Java_Clipboard_getCoercedText(env, clipboard_manager_.obj()); + if (java_string_text.obj()) { + std::string android_string = ConvertJavaStringToUTF8(java_string_text); + if (!android_string.empty() && + (it == map_.end() || it->second != android_string)) { + // There is a different string in the Android clipboard than we have. + // Clear the map on our side. + map_.clear(); + map_[kPlainTextFormat] = android_string; + } + } else { + if (it != map_.end()) { // We have plain text on this side, but Android doesn't. Nuke ours. map_.clear(); - return; + } } - ScopedJavaLocalRef<jstring> java_string = - Java_Clipboard_getCoercedText(env, clipboard_manager_.obj()); - - if (!java_string.obj()) { - // Tolerate a null value from the Java side, even though that should not - // happen since hasPlainText has already returned true. - // Should only happen if someone is using the clipboard on multiple - // threads and clears it out after hasPlainText but before we get here... - if (it != map_.end()) - // We have plain text on this side, but Android doesn't. Nuke ours. - map_.clear(); + if (!Java_Clipboard_isHTMLClipboardSupported(env)) { return; } - // If Android text differs from ours (or we have none), then copy Android's. - std::string android_string = ConvertJavaStringToUTF8(java_string); - if (it == map_.end() || it->second != android_string) { - map_.clear(); - map_[kPlainTextFormat] = android_string; + // Update the html clipboard entry + ScopedJavaLocalRef<jstring> java_string_html = + Java_Clipboard_getHTMLText(env, clipboard_manager_.obj()); + if (java_string_html.obj()) { + std::string android_string = ConvertJavaStringToUTF8(java_string_html); + if (!android_string.empty()) { + map_[kHTMLFormat] = android_string; + return; + } + } + it = map_.find(kHTMLFormat); + if (it != map_.end()) { + map_.erase(kHTMLFormat); } } diff --git a/ui/base/clipboard/clipboard_aura.cc b/ui/base/clipboard/clipboard_aura.cc index 20744660fb..638604b502 100644 --- a/ui/base/clipboard/clipboard_aura.cc +++ b/ui/base/clipboard/clipboard_aura.cc @@ -337,8 +337,7 @@ void DeleteClipboard() { class ClipboardDataBuilder { public: static void CommitToClipboard() { - DCHECK(current_data_); - GetClipboard()->WriteData(current_data_); + GetClipboard()->WriteData(GetCurrentData()); current_data_ = NULL; } diff --git a/ui/base/clipboard/clipboard_gtk.cc b/ui/base/clipboard/clipboard_gtk.cc index 59e2bc4054..eebcc5e39c 100644 --- a/ui/base/clipboard/clipboard_gtk.cc +++ b/ui/base/clipboard/clipboard_gtk.cc @@ -317,8 +317,8 @@ void Clipboard::WriteBitmap(const SkBitmap& bitmap) { void Clipboard::WriteBookmark(const char* title_data, size_t title_len, const char* url_data, size_t url_len) { // Write as a mozilla url (UTF16: URL, newline, title). - string16 url = UTF8ToUTF16(std::string(url_data, url_len) + "\n"); - string16 title = UTF8ToUTF16(std::string(title_data, title_len)); + base::string16 url = UTF8ToUTF16(std::string(url_data, url_len) + "\n"); + base::string16 title = UTF8ToUTF16(std::string(title_data, title_len)); if (title.length() >= std::numeric_limits<size_t>::max() / 4 || url.length() >= std::numeric_limits<size_t>::max() / 4) return; @@ -407,7 +407,7 @@ void Clipboard::Clear(ClipboardType type) { } void Clipboard::ReadAvailableTypes(ClipboardType type, - std::vector<string16>* types, + std::vector<base::string16>* types, bool* contains_filenames) const { DCHECK(CalledOnValidThread()); if (!types || !contains_filenames) { @@ -441,7 +441,7 @@ void Clipboard::ReadAvailableTypes(ClipboardType type, } -void Clipboard::ReadText(ClipboardType type, string16* result) const { +void Clipboard::ReadText(ClipboardType type, base::string16* result) const { DCHECK(CalledOnValidThread()); GtkClipboard* clipboard = LookupBackingClipboard(type); if (clipboard == NULL) @@ -478,7 +478,7 @@ void Clipboard::ReadAsciiText(ClipboardType type, // TODO(estade): handle different charsets. // TODO(port): set *src_url. void Clipboard::ReadHTML(ClipboardType type, - string16* markup, + base::string16* markup, std::string* src_url, uint32* fragment_start, uint32* fragment_end) const { @@ -547,8 +547,8 @@ SkBitmap Clipboard::ReadImage(ClipboardType type) const { } void Clipboard::ReadCustomData(ClipboardType clipboard_type, - const string16& type, - string16* result) const { + const base::string16& type, + base::string16* result) const { DCHECK(CalledOnValidThread()); GtkClipboard* clipboard = LookupBackingClipboard(clipboard_type); if (!clipboard) @@ -564,7 +564,7 @@ void Clipboard::ReadCustomData(ClipboardType clipboard_type, gtk_selection_data_free(data); } -void Clipboard::ReadBookmark(string16* title, std::string* url) const { +void Clipboard::ReadBookmark(base::string16* title, std::string* url) const { // TODO(estade): implement this. NOTIMPLEMENTED(); } diff --git a/ui/base/clipboard/clipboard_unittest.cc b/ui/base/clipboard/clipboard_unittest.cc index c423e418c8..324663aec1 100644 --- a/ui/base/clipboard/clipboard_unittest.cc +++ b/ui/base/clipboard/clipboard_unittest.cc @@ -89,11 +89,13 @@ TEST_F(ClipboardTest, TextTest) { TEST_F(ClipboardTest, HTMLTest) { string16 markup(ASCIIToUTF16("<string>Hi!</string>")), markup_result; + string16 plain(ASCIIToUTF16("Hi!")), plain_result; std::string url("http://www.example.com/"), url_result; { ScopedClipboardWriter clipboard_writer(&clipboard(), CLIPBOARD_TYPE_COPY_PASTE); + clipboard_writer.WriteText(plain); clipboard_writer.WriteHTML(markup, url); } @@ -175,10 +177,12 @@ TEST_F(ClipboardTest, TrickyHTMLTest) { string16 markup(ASCIIToUTF16("<em>Bye!<!--EndFragment --></em>")), markup_result; std::string url, url_result; + string16 plain(ASCIIToUTF16("Bye!")), plain_result; { ScopedClipboardWriter clipboard_writer(&clipboard(), CLIPBOARD_TYPE_COPY_PASTE); + clipboard_writer.WriteText(plain); clipboard_writer.WriteHTML(markup, url); } @@ -423,6 +427,111 @@ TEST_F(ClipboardTest, SharedBitmapTest) { } } +namespace { +// A size class that just happens to have the same layout as gfx::Size! +struct UnsafeSize { + int width; + int height; +}; +COMPILE_ASSERT(sizeof(UnsafeSize) == sizeof(gfx::Size), + UnsafeSize_must_be_same_size_as_gfx_Size); +} // namespace + +TEST_F(ClipboardTest, SharedBitmapWithTwoNegativeSizes) { + Clipboard::ObjectMapParam placeholder_param; + void* crash_me = reinterpret_cast<void*>(57); + placeholder_param.resize(sizeof(crash_me)); + memcpy(&placeholder_param.front(), &crash_me, sizeof(crash_me)); + + Clipboard::ObjectMapParam size_param; + UnsafeSize size = {-100, -100}; + size_param.resize(sizeof(size)); + memcpy(&size_param.front(), &size, sizeof(size)); + + Clipboard::ObjectMapParams params; + params.push_back(placeholder_param); + params.push_back(size_param); + + Clipboard::ObjectMap objects; + objects[Clipboard::CBF_SMBITMAP] = params; + + clipboard().WriteObjects(CLIPBOARD_TYPE_COPY_PASTE, objects); + EXPECT_FALSE(clipboard().IsFormatAvailable(Clipboard::GetBitmapFormatType(), + CLIPBOARD_TYPE_COPY_PASTE)); +} + +TEST_F(ClipboardTest, SharedBitmapWithOneNegativeSize) { + Clipboard::ObjectMapParam placeholder_param; + void* crash_me = reinterpret_cast<void*>(57); + placeholder_param.resize(sizeof(crash_me)); + memcpy(&placeholder_param.front(), &crash_me, sizeof(crash_me)); + + Clipboard::ObjectMapParam size_param; + UnsafeSize size = {-100, 100}; + size_param.resize(sizeof(size)); + memcpy(&size_param.front(), &size, sizeof(size)); + + Clipboard::ObjectMapParams params; + params.push_back(placeholder_param); + params.push_back(size_param); + + Clipboard::ObjectMap objects; + objects[Clipboard::CBF_SMBITMAP] = params; + + clipboard().WriteObjects(CLIPBOARD_TYPE_COPY_PASTE, objects); + EXPECT_FALSE(clipboard().IsFormatAvailable(Clipboard::GetBitmapFormatType(), + CLIPBOARD_TYPE_COPY_PASTE)); +} + +TEST_F(ClipboardTest, BitmapWithSuperSize) { + Clipboard::ObjectMapParam placeholder_param; + void* crash_me = reinterpret_cast<void*>(57); + placeholder_param.resize(sizeof(crash_me)); + memcpy(&placeholder_param.front(), &crash_me, sizeof(crash_me)); + + Clipboard::ObjectMapParam size_param; + // Width just big enough that bytes per row won't fit in a 32-bit + // representation. + gfx::Size size(0x20000000, 1); + size_param.resize(sizeof(size)); + memcpy(&size_param.front(), &size, sizeof(size)); + + Clipboard::ObjectMapParams params; + params.push_back(placeholder_param); + params.push_back(size_param); + + Clipboard::ObjectMap objects; + objects[Clipboard::CBF_SMBITMAP] = params; + + clipboard().WriteObjects(CLIPBOARD_TYPE_COPY_PASTE, objects); + EXPECT_FALSE(clipboard().IsFormatAvailable(Clipboard::GetBitmapFormatType(), + CLIPBOARD_TYPE_COPY_PASTE)); +} + +TEST_F(ClipboardTest, BitmapWithSuperSize2) { + Clipboard::ObjectMapParam placeholder_param; + void* crash_me = reinterpret_cast<void*>(57); + placeholder_param.resize(sizeof(crash_me)); + memcpy(&placeholder_param.front(), &crash_me, sizeof(crash_me)); + + Clipboard::ObjectMapParam size_param; + // Width and height large enough that SkBitmap::getSize() will be truncated. + gfx::Size size(0x0fffffff, 0x0fffffff); + size_param.resize(sizeof(size)); + memcpy(&size_param.front(), &size, sizeof(size)); + + Clipboard::ObjectMapParams params; + params.push_back(placeholder_param); + params.push_back(size_param); + + Clipboard::ObjectMap objects; + objects[Clipboard::CBF_SMBITMAP] = params; + + clipboard().WriteObjects(CLIPBOARD_TYPE_COPY_PASTE, objects); + EXPECT_FALSE(clipboard().IsFormatAvailable(Clipboard::GetBitmapFormatType(), + CLIPBOARD_TYPE_COPY_PASTE)); +} + TEST_F(ClipboardTest, DataTest) { const ui::Clipboard::FormatType kFormat = ui::Clipboard::GetFormatType("chromium/x-test-format"); diff --git a/ui/base/clipboard/custom_data_helper.cc b/ui/base/clipboard/custom_data_helper.cc index 09073611a7..f0b3aa3084 100644 --- a/ui/base/clipboard/custom_data_helper.cc +++ b/ui/base/clipboard/custom_data_helper.cc @@ -32,14 +32,14 @@ bool SkippablePickle::SkipString16(PickleIterator* iter) { int len; if (!ReadLength(iter, &len)) return false; - return iter->SkipBytes(len * sizeof(char16)); + return iter->SkipBytes(len * sizeof(base::char16)); } } // namespace void ReadCustomDataTypes(const void* data, size_t data_length, - std::vector<string16>* types) { + std::vector<base::string16>* types) { SkippablePickle pickle(data, data_length); PickleIterator iter(pickle); @@ -53,7 +53,7 @@ void ReadCustomDataTypes(const void* data, uint64 original_size = types->size(); for (uint64 i = 0; i < size; ++i) { - types->push_back(string16()); + types->push_back(base::string16()); if (!pickle.ReadString16(&iter, &types->back()) || !pickle.SkipString16(&iter)) { types->resize(original_size); @@ -64,8 +64,8 @@ void ReadCustomDataTypes(const void* data, void ReadCustomDataForType(const void* data, size_t data_length, - const string16& type, - string16* result) { + const base::string16& type, + base::string16* result) { SkippablePickle pickle(data, data_length); PickleIterator iter(pickle); @@ -74,7 +74,7 @@ void ReadCustomDataForType(const void* data, return; for (uint64 i = 0; i < size; ++i) { - string16 deserialized_type; + base::string16 deserialized_type; if (!pickle.ReadString16(&iter, &deserialized_type)) return; if (deserialized_type == type) { @@ -88,7 +88,7 @@ void ReadCustomDataForType(const void* data, void ReadCustomDataIntoMap(const void* data, size_t data_length, - std::map<string16, string16>* result) { + std::map<base::string16, base::string16>* result) { Pickle pickle(reinterpret_cast<const char*>(data), data_length); PickleIterator iter(pickle); @@ -97,14 +97,14 @@ void ReadCustomDataIntoMap(const void* data, return; for (uint64 i = 0; i < size; ++i) { - string16 type; + base::string16 type; if (!pickle.ReadString16(&iter, &type)) { // Data is corrupt, return an empty map. result->clear(); return; } - std::pair<std::map<string16, string16>::iterator, bool> insert_result = - result->insert(std::make_pair(type, string16())); + std::pair<std::map<base::string16, base::string16>::iterator, bool> + insert_result = result->insert(std::make_pair(type, base::string16())); if (!pickle.ReadString16(&iter, &insert_result.first->second)) { // Data is corrupt, return an empty map. result->clear(); @@ -113,10 +113,12 @@ void ReadCustomDataIntoMap(const void* data, } } -void WriteCustomDataToPickle(const std::map<string16, string16>& data, - Pickle* pickle) { +void WriteCustomDataToPickle( + const std::map<base::string16, base::string16>& data, + Pickle* pickle) { pickle->WriteUInt64(data.size()); - for (std::map<string16, string16>::const_iterator it = data.begin(); + for (std::map<base::string16, base::string16>::const_iterator it = + data.begin(); it != data.end(); ++it) { pickle->WriteString16(it->first); diff --git a/ui/base/clipboard/custom_data_helper.h b/ui/base/clipboard/custom_data_helper.h index 57e1772146..55e7dce382 100644 --- a/ui/base/clipboard/custom_data_helper.h +++ b/ui/base/clipboard/custom_data_helper.h @@ -36,17 +36,19 @@ UI_EXPORT extern const char kMimeTypeWebCustomData[]; UI_EXPORT void ReadCustomDataTypes(const void* data, size_t data_length, - std::vector<string16>* types); + std::vector<base::string16>* types); UI_EXPORT void ReadCustomDataForType(const void* data, size_t data_length, - const string16& type, - string16* result); -UI_EXPORT void ReadCustomDataIntoMap(const void* data, - size_t data_length, - std::map<string16, string16>* result); - -UI_EXPORT void WriteCustomDataToPickle(const std::map<string16, string16>& data, - Pickle* pickle); + const base::string16& type, + base::string16* result); +UI_EXPORT void ReadCustomDataIntoMap( + const void* data, + size_t data_length, + std::map<base::string16, base::string16>* result); + +UI_EXPORT void WriteCustomDataToPickle( + const std::map<base::string16, base::string16>& data, + Pickle* pickle); } // namespace ui diff --git a/ui/base/clipboard/scoped_clipboard_writer.cc b/ui/base/clipboard/scoped_clipboard_writer.cc index 8e46955972..120832f4a4 100644 --- a/ui/base/clipboard/scoped_clipboard_writer.cc +++ b/ui/base/clipboard/scoped_clipboard_writer.cc @@ -26,15 +26,15 @@ ScopedClipboardWriter::~ScopedClipboardWriter() { clipboard_->WriteObjects(type_, objects_); } -void ScopedClipboardWriter::WriteText(const string16& text) { +void ScopedClipboardWriter::WriteText(const base::string16& text) { WriteTextOrURL(text, false); } -void ScopedClipboardWriter::WriteURL(const string16& text) { +void ScopedClipboardWriter::WriteURL(const base::string16& text) { WriteTextOrURL(text, true); } -void ScopedClipboardWriter::WriteHTML(const string16& markup, +void ScopedClipboardWriter::WriteHTML(const base::string16& markup, const std::string& source_url) { std::string utf8_markup = UTF16ToUTF8(markup); @@ -57,7 +57,7 @@ void ScopedClipboardWriter::WriteRTF(const std::string& rtf_data) { objects_[Clipboard::CBF_RTF] = parameters; } -void ScopedClipboardWriter::WriteBookmark(const string16& bookmark_title, +void ScopedClipboardWriter::WriteBookmark(const base::string16& bookmark_title, const std::string& url) { if (bookmark_title.empty() || url.empty()) return; @@ -71,7 +71,7 @@ void ScopedClipboardWriter::WriteBookmark(const string16& bookmark_title, objects_[Clipboard::CBF_BOOKMARK] = parameters; } -void ScopedClipboardWriter::WriteHyperlink(const string16& anchor_text, +void ScopedClipboardWriter::WriteHyperlink(const base::string16& anchor_text, const std::string& url) { if (anchor_text.empty() || url.empty()) return; @@ -111,7 +111,8 @@ void ScopedClipboardWriter::Reset() { objects_.clear(); } -void ScopedClipboardWriter::WriteTextOrURL(const string16& text, bool is_url) { +void ScopedClipboardWriter::WriteTextOrURL(const base::string16& text, + bool is_url) { std::string utf8_text = UTF16ToUTF8(text); Clipboard::ObjectMapParams parameters; diff --git a/ui/base/clipboard/scoped_clipboard_writer.h b/ui/base/clipboard/scoped_clipboard_writer.h index 73ff53ba66..8c7bb1a668 100644 --- a/ui/base/clipboard/scoped_clipboard_writer.h +++ b/ui/base/clipboard/scoped_clipboard_writer.h @@ -33,26 +33,27 @@ class UI_EXPORT ScopedClipboardWriter { ~ScopedClipboardWriter(); // Converts |text| to UTF-8 and adds it to the clipboard. - void WriteText(const string16& text); + void WriteText(const base::string16& text); // Converts the text of the URL to UTF-8 and adds it to the clipboard, then // notifies the Clipboard that we just wrote a URL. - void WriteURL(const string16& text); + void WriteURL(const base::string16& text); // Adds HTML to the clipboard. The url parameter is optional, but especially // useful if the HTML fragment contains relative links. - void WriteHTML(const string16& markup, const std::string& source_url); + void WriteHTML(const base::string16& markup, const std::string& source_url); // Adds RTF to the clipboard. void WriteRTF(const std::string& rtf_data); // Adds a bookmark to the clipboard. - void WriteBookmark(const string16& bookmark_title, + void WriteBookmark(const base::string16& bookmark_title, const std::string& url); // Adds an html hyperlink (<a href>) to the clipboard. |anchor_text| and // |url| will be escaped as needed. - void WriteHyperlink(const string16& anchor_text, const std::string& url); + void WriteHyperlink(const base::string16& anchor_text, + const std::string& url); // Used by WebKit to determine whether WebKit wrote the clipboard last void WriteWebSmartPaste(); @@ -67,7 +68,7 @@ class UI_EXPORT ScopedClipboardWriter { protected: // Converts |text| to UTF-8 and adds it to the clipboard. If it's a URL, we // also notify the clipboard of that fact. - void WriteTextOrURL(const string16& text, bool is_url); + void WriteTextOrURL(const base::string16& text, bool is_url); // We accumulate the data passed to the various targets in the |objects_| // vector, and pass it to Clipboard::WriteObjects() during object destruction. diff --git a/ui/base/cursor/cursors_aura.cc b/ui/base/cursor/cursors_aura.cc index cdf4ab3685..7b382375fc 100644 --- a/ui/base/cursor/cursors_aura.cc +++ b/ui/base/cursor/cursors_aura.cc @@ -75,49 +75,54 @@ const CursorData kNormalCursors[] = { }; const CursorData kLargeCursors[] = { - {ui::kCursorNull, IDR_AURA_CURSOR_BIG_PTR, {10, 10}, {10, 10}}, - {ui::kCursorPointer, IDR_AURA_CURSOR_BIG_PTR, {10, 10}, {10, 10}}, - {ui::kCursorNoDrop, IDR_AURA_CURSOR_BIG_NO_DROP, {23, 23}, {23, 23}}, - {ui::kCursorNotAllowed, IDR_AURA_CURSOR_BIG_NO_DROP, {23, 23}, {23, 23}}, - {ui::kCursorCopy, IDR_AURA_CURSOR_BIG_COPY, {23, 23}, {23, 23}}, - {ui::kCursorHand, IDR_AURA_CURSOR_BIG_HAND, {23, 10}, {23, 10}}, - {ui::kCursorMove, IDR_AURA_CURSOR_BIG_MOVE, {28, 28}, {28, 28}}, + // The 2x hotspots should be double of the 1x, even though the cursors are + // shown as same size as 1x (64x64). Since, in 2x dpi screen, the 1x large + // cursor assets (64x64) are internally enlarged to the double size (128x128) + // by ResourceBundleImageSource. + {ui::kCursorNull, IDR_AURA_CURSOR_BIG_PTR, {10, 10}, {20, 20}}, + {ui::kCursorPointer, IDR_AURA_CURSOR_BIG_PTR, {10, 10}, {20, 20}}, + {ui::kCursorNoDrop, IDR_AURA_CURSOR_BIG_NO_DROP, {10, 10}, {20, 20}}, + {ui::kCursorNotAllowed, IDR_AURA_CURSOR_BIG_NO_DROP, {23, 23}, {46, 46}}, + {ui::kCursorCopy, IDR_AURA_CURSOR_BIG_COPY, {10, 10}, {20, 20}}, + {ui::kCursorHand, IDR_AURA_CURSOR_BIG_HAND, {25, 7}, {50, 14}}, + {ui::kCursorMove, IDR_AURA_CURSOR_BIG_MOVE, {32, 31}, {64, 62}}, {ui::kCursorNorthEastResize, IDR_AURA_CURSOR_BIG_NORTH_EAST_RESIZE, - {31, 28}, {31, 28}}, + {31, 28}, {62, 56}}, {ui::kCursorSouthWestResize, IDR_AURA_CURSOR_BIG_SOUTH_WEST_RESIZE, - {31, 28}, {31, 28}}, + {31, 28}, {62, 56}}, {ui::kCursorSouthEastResize, IDR_AURA_CURSOR_BIG_SOUTH_EAST_RESIZE, - {28, 28}, {28, 28}}, + {28, 28}, {56, 56}}, {ui::kCursorNorthWestResize, IDR_AURA_CURSOR_BIG_NORTH_WEST_RESIZE, - {28, 28}, {28, 28}}, + {28, 28}, {56, 56}}, {ui::kCursorNorthResize, IDR_AURA_CURSOR_BIG_NORTH_RESIZE, - {28, 31}, {28, 31}}, + {29, 32}, {58, 64}}, {ui::kCursorSouthResize, IDR_AURA_CURSOR_BIG_SOUTH_RESIZE, - {28, 31}, {28, 31}}, - {ui::kCursorEastResize, IDR_AURA_CURSOR_BIG_EAST_RESIZE, {31, 28}, {31, 28}}, - {ui::kCursorWestResize, IDR_AURA_CURSOR_BIG_WEST_RESIZE, {31, 28}, {31, 28}}, - {ui::kCursorIBeam, IDR_AURA_CURSOR_BIG_IBEAM, {31, 31}, {31, 31}}, - {ui::kCursorAlias, IDR_AURA_CURSOR_BIG_ALIAS, {51, 15}, {51, 11}}, - {ui::kCursorCell, IDR_AURA_CURSOR_BIG_CELL, {28, 28}, {24, 23}}, - {ui::kCursorContextMenu, IDR_AURA_CURSOR_BIG_CONTEXT_MENU, {4, 4}, {8, 9}}, - {ui::kCursorCross, IDR_AURA_CURSOR_BIG_CROSSHAIR, {31, 31}, {31, 31}}, - {ui::kCursorHelp, IDR_AURA_CURSOR_BIG_HELP, {10, 10}, {8, 9}}, + {29, 32}, {58, 64}}, + {ui::kCursorEastResize, IDR_AURA_CURSOR_BIG_EAST_RESIZE, {35, 29}, {70, 58}}, + {ui::kCursorWestResize, IDR_AURA_CURSOR_BIG_WEST_RESIZE, {35, 29}, {70, 58}}, + {ui::kCursorIBeam, IDR_AURA_CURSOR_BIG_IBEAM, {30, 32}, {30, 64}}, + {ui::kCursorAlias, IDR_AURA_CURSOR_BIG_ALIAS, {19, 11}, {38, 22}}, + {ui::kCursorCell, IDR_AURA_CURSOR_BIG_CELL, {30, 30}, {60, 60}}, + {ui::kCursorContextMenu, IDR_AURA_CURSOR_BIG_CONTEXT_MENU, + {11, 11}, {22, 22}}, + {ui::kCursorCross, IDR_AURA_CURSOR_BIG_CROSSHAIR, {31, 30}, {62, 60}}, + {ui::kCursorHelp, IDR_AURA_CURSOR_BIG_HELP, {10, 11}, {20, 22}}, {ui::kCursorVerticalText, IDR_AURA_CURSOR_BIG_XTERM_HORIZ, - {31, 28}, {31, 28}}, - {ui::kCursorZoomIn, IDR_AURA_CURSOR_BIG_ZOOM_IN, {26, 26}, {26, 26}}, - {ui::kCursorZoomOut, IDR_AURA_CURSOR_BIG_ZOOM_OUT, {26, 26}, {26, 26}}, - {ui::kCursorRowResize, IDR_AURA_CURSOR_BIG_ROW_RESIZE, {28, 31}, {28, 31}}, - {ui::kCursorColumnResize, IDR_AURA_CURSOR_BIG_COL_RESIZE, {31, 28}, {31, 28}}, + {32, 30}, {64, 60}}, + {ui::kCursorZoomIn, IDR_AURA_CURSOR_BIG_ZOOM_IN, {25, 26}, {50, 52}}, + {ui::kCursorZoomOut, IDR_AURA_CURSOR_BIG_ZOOM_OUT, {26, 26}, {52, 52}}, + {ui::kCursorRowResize, IDR_AURA_CURSOR_BIG_ROW_RESIZE, {29, 32}, {58, 64}}, + {ui::kCursorColumnResize, IDR_AURA_CURSOR_BIG_COL_RESIZE, {35, 29}, {70, 58}}, {ui::kCursorEastWestResize, IDR_AURA_CURSOR_BIG_EAST_WEST_RESIZE, - {31, 28}, {31, 28}}, + {35, 29}, {70, 58}}, {ui::kCursorNorthSouthResize, IDR_AURA_CURSOR_BIG_NORTH_SOUTH_RESIZE, - {28, 31}, {28, 31}}, + {29, 32}, {58, 64}}, {ui::kCursorNorthEastSouthWestResize, - IDR_AURA_CURSOR_BIG_NORTH_EAST_SOUTH_WEST_RESIZE, {31, 28}, {31, 28}}, + IDR_AURA_CURSOR_BIG_NORTH_EAST_SOUTH_WEST_RESIZE, {32, 30}, {64, 60}}, {ui::kCursorNorthWestSouthEastResize, - IDR_AURA_CURSOR_BIG_NORTH_WEST_SOUTH_EAST_RESIZE, {28, 28}, {28, 28}}, - {ui::kCursorGrab, IDR_AURA_CURSOR_BIG_GRAB, {20, 13}, {20, 13}}, - {ui::kCursorGrabbing, IDR_AURA_CURSOR_BIG_GRABBING, {23, 23}, {23, 23}}, + IDR_AURA_CURSOR_BIG_NORTH_WEST_SOUTH_EAST_RESIZE, {32, 31}, {64, 62}}, + {ui::kCursorGrab, IDR_AURA_CURSOR_BIG_GRAB, {21, 11}, {42, 22}}, + {ui::kCursorGrabbing, IDR_AURA_CURSOR_BIG_GRABBING, {20, 12}, {40, 24}}, }; const CursorData kAnimatedCursors[] = { diff --git a/ui/base/gtk/gtk_hig_constants.h b/ui/base/gtk/gtk_hig_constants.h index 147c5189e9..a03db506d1 100644 --- a/ui/base/gtk/gtk_hig_constants.h +++ b/ui/base/gtk/gtk_hig_constants.h @@ -10,8 +10,6 @@ #ifndef UI_BASE_GTK_GTK_HIG_CONSTANTS_H_ #define UI_BASE_GTK_GTK_HIG_CONSTANTS_H_ -#include "ui/base/ui_export.h" - typedef struct _GdkColor GdkColor; // Define a macro for creating GdkColors from RGB values. This is a macro to diff --git a/ui/base/ime/character_composer.cc b/ui/base/ime/chromeos/character_composer.cc index 6fff429a2a..b9fb51f084 100644 --- a/ui/base/ime/character_composer.cc +++ b/ui/base/ime/chromeos/character_composer.cc @@ -1,10 +1,11 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright 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. -#include "ui/base/ime/character_composer.h" +#include "ui/base/ime/chromeos/character_composer.h" #include <X11/Xlib.h> +#include <X11/Xutil.h> #include <algorithm> #include <iterator> @@ -15,6 +16,7 @@ // '#define GDK_KeyName 0xNNNN' macros and does not #include any Gtk headers. #include "third_party/gtk+/gdk/gdkkeysyms.h" #include "ui/base/glib/glib_integers.h" +#include "ui/events/event.h" #include "ui/events/event_constants.h" #include "ui/gfx/x/x11_types.h" @@ -409,9 +411,23 @@ void CharacterComposer::Reset() { composition_mode_ = KEY_SEQUENCE_MODE; } -bool CharacterComposer::FilterKeyPress(unsigned int keyval, - unsigned int keycode, - int flags) { +bool CharacterComposer::FilterKeyPress(const ui::KeyEvent& event) { + if (!event.HasNativeEvent() || + (event.type() != ET_KEY_PRESSED && event.type() != ET_KEY_RELEASED)) + return false; + + XEvent* xevent = event.native_event(); + DCHECK(xevent); + KeySym keysym = NoSymbol; + ::XLookupString(&xevent->xkey, NULL, 0, &keysym, NULL); + + return FilterKeyPressInternal(keysym, xevent->xkey.keycode, event.flags()); +} + + +bool CharacterComposer::FilterKeyPressInternal(unsigned int keyval, + unsigned int keycode, + int flags) { composed_character_.clear(); preedit_string_.clear(); @@ -435,7 +451,7 @@ bool CharacterComposer::FilterKeyPress(unsigned int keyval, // Filter key press in an appropriate manner. switch (composition_mode_) { case KEY_SEQUENCE_MODE: - return FilterKeyPressSequenceMode(keyval, keycode, flags); + return FilterKeyPressSequenceMode(keyval, flags); case HEX_MODE: return FilterKeyPressHexMode(keyval, keycode, flags); default: @@ -445,7 +461,6 @@ bool CharacterComposer::FilterKeyPress(unsigned int keyval, } bool CharacterComposer::FilterKeyPressSequenceMode(unsigned int keyval, - unsigned int keycode, int flags) { DCHECK(composition_mode_ == KEY_SEQUENCE_MODE); compose_buffer_.push_back(keyval); diff --git a/ui/base/ime/character_composer.h b/ui/base/ime/chromeos/character_composer.h index ed584eddef..0624eb55c6 100644 --- a/ui/base/ime/character_composer.h +++ b/ui/base/ime/chromeos/character_composer.h @@ -1,9 +1,9 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright 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. -#ifndef UI_BASE_IME_CHARACTER_COMPOSER_H_ -#define UI_BASE_IME_CHARACTER_COMPOSER_H_ +#ifndef UI_BASE_IME_CHROMEOS_CHARACTER_COMPOSER_H_ +#define UI_BASE_IME_CHROMEOS_CHARACTER_COMPOSER_H_ #include <vector> @@ -11,6 +11,7 @@ #include "ui/base/ui_export.h" namespace ui { +class KeyEvent; // A class to recognize compose and dead key sequence. // Outputs composed character. @@ -24,22 +25,8 @@ class UI_EXPORT CharacterComposer { // Filters keypress. // Returns true if the keypress is recognized as a part of composition // sequence. - // |keyval| must be a GDK_KEY_* constant. - // |keycode| must be a X key code. - // |flags| must be a combination of ui::EF_* flags. - // - // composed_character() returns non empty string when there is a character - // composed after this method returns true. - // preedit_string() returns non empty string when there is a preedit string - // after this method returns true. - // Return values of preedit_string() is empty after this method returns false. - // composed_character() may have some characters which are consumed in this - // composing session. - // - // - // TODO(nona): Actually a X KeySym is passed to |keyval|, so we should use - // XK_* rather than GDK_KEY_*. - bool FilterKeyPress(unsigned int keyval, unsigned int keycode, int flags); + // Fabricated events which don't have the native event, are not supported. + bool FilterKeyPress(const ui::KeyEvent& event); // Returns a string consisting of composed character. // Empty string is returned when there is no composition result. @@ -49,6 +36,8 @@ class UI_EXPORT CharacterComposer { const string16& preedit_string() const { return preedit_string_; } private: + friend class CharacterComposerTest; + // An enum to describe composition mode. enum CompositionMode { // This is the initial state. @@ -58,9 +47,29 @@ class UI_EXPORT CharacterComposer { HEX_MODE, }; + // Filters keypress using IBus defined value. + // Returns true if the keypress is recognized as a part of composition + // sequence. + // |keyval| must be a GDK_KEY_* constant. + // |keycode| must be a X key code. + // |flags| must be a combination of ui::EF_* flags. + // + // composed_character() returns non empty string when there is a character + // composed after this method returns true. + // preedit_string() returns non empty string when there is a preedit string + // after this method returns true. + // Return values of preedit_string() is empty after this method returns false. + // composed_character() may have some characters which are consumed in this + // composing session. + // + // + // TODO(nona): Actually a X KeySym is passed to |keyval|, so we should use + // XK_* rather than GDK_KEY_*. + bool FilterKeyPressInternal(unsigned int keyval, unsigned int keycode, + int flags); + // Filters keypress in key sequence mode. - bool FilterKeyPressSequenceMode(unsigned int keyval, unsigned int keycode, - int flags); + bool FilterKeyPressSequenceMode(unsigned int keyval, int flags); // Filters keypress in hexadecimal mode. bool FilterKeyPressHexMode(unsigned int keyval, unsigned int keycode, @@ -89,4 +98,4 @@ class UI_EXPORT CharacterComposer { } // namespace ui -#endif // UI_BASE_IME_CHARACTER_COMPOSER_H_ +#endif // UI_BASE_IME_CHROMEOS_CHARACTER_COMPOSER_H_ diff --git a/ui/base/ime/character_composer_unittest.cc b/ui/base/ime/chromeos/character_composer_unittest.cc index 0710204997..4e5d7f8838 100644 --- a/ui/base/ime/character_composer_unittest.cc +++ b/ui/base/ime/chromeos/character_composer_unittest.cc @@ -1,8 +1,8 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright 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. -#include "ui/base/ime/character_composer.h" +#include "ui/base/ime/chromeos/character_composer.h" #include "base/strings/utf_string_conversions.h" #include "testing/gtest/include/gtest/gtest.h" @@ -12,118 +12,134 @@ namespace ui { -namespace { +class CharacterComposerTest : public testing::Test { + protected: + bool FilterKeyPress(CharacterComposer* character_composer, + uint key, + uint keycode, + int flags) { + return character_composer->FilterKeyPressInternal(key, keycode, flags); + } -// Expects key is not filtered and no character is composed. -void ExpectKeyNotFiltered(CharacterComposer* character_composer, - uint key, - int flags) { - EXPECT_FALSE(character_composer->FilterKeyPress(key, 0, flags)); - EXPECT_TRUE(character_composer->composed_character().empty()); -} + // Expects key is not filtered and no character is composed. + void ExpectKeyNotFilteredWithKeyCode(CharacterComposer* character_composer, + uint key, + uint keycode, + int flags) { + EXPECT_FALSE(character_composer->FilterKeyPressInternal(key, keycode, + flags)); + EXPECT_TRUE(character_composer->composed_character().empty()); + } -// Expects key is filtered and no character is composed. -void ExpectKeyFiltered(CharacterComposer* character_composer, - uint key, - int flags) { - EXPECT_TRUE(character_composer->FilterKeyPress(key, 0, flags)); - EXPECT_TRUE(character_composer->composed_character().empty()); -} + // Expects key is filtered and no character is composed. + void ExpectKeyFilteredWithKeycode(CharacterComposer* character_composer, + uint key, + uint keycode, + int flags) { + EXPECT_TRUE(character_composer->FilterKeyPressInternal(key, keycode, + flags)); + EXPECT_TRUE(character_composer->composed_character().empty()); + } -// Expects key is filtered and no character is composed. -void ExpectKeyFilteredWithKeycode(CharacterComposer* character_composer, - uint key, - uint keycode, - int flags) { - EXPECT_TRUE(character_composer->FilterKeyPress(key, keycode, flags)); - EXPECT_TRUE(character_composer->composed_character().empty()); -} + // Expects key is not filtered and no character is composed. + void ExpectKeyNotFiltered(CharacterComposer* character_composer, + uint key, + int flags) { + ExpectKeyNotFilteredWithKeyCode(character_composer, key, 0, flags); + } -// Expects |expected_character| is composed after sequence [key1, key2]. -void ExpectCharacterComposed(CharacterComposer* character_composer, - uint key1, - uint key2, - int flags, - const string16& expected_character) { - ExpectKeyFiltered(character_composer, key1, flags); - EXPECT_TRUE(character_composer->FilterKeyPress(key2, 0, flags)); - EXPECT_EQ(expected_character, character_composer->composed_character()); -} + // Expects key is filtered and no character is composed. + void ExpectKeyFiltered(CharacterComposer* character_composer, + uint key, + int flags) { + ExpectKeyFilteredWithKeycode(character_composer, key, 0, flags); + } -// Expects |expected_character| is composed after sequence [key1, key2, key3]. -void ExpectCharacterComposed(CharacterComposer* character_composer, - uint key1, + // Expects |expected_character| is composed after sequence [key1, key2]. + void ExpectCharacterComposed(CharacterComposer* character_composer, + uint key1, uint key2, - uint key3, - int flags, - const string16& expected_character) { - ExpectKeyFiltered(character_composer, key1, flags); - ExpectCharacterComposed(character_composer, key2, key3, flags, - expected_character); -} + int flags, + const string16& expected_character) { + ExpectKeyFiltered(character_composer, key1, flags); + EXPECT_TRUE(character_composer->FilterKeyPressInternal(key2, 0, flags)); + EXPECT_EQ(expected_character, character_composer->composed_character()); + } -// Expects |expected_character| is composed after sequence [key1, key2, key3, -// key 4]. -void ExpectCharacterComposed(CharacterComposer* character_composer, - uint key1, - uint key2, - uint key3, - uint key4, - int flags, - const string16& expected_character) { - ExpectKeyFiltered(character_composer, key1, flags); - ExpectCharacterComposed(character_composer, key2, key3, key4, flags, - expected_character); -} + // Expects |expected_character| is composed after sequence [key1, key2, key3]. + void ExpectCharacterComposed(CharacterComposer* character_composer, + uint key1, + uint key2, + uint key3, + int flags, + const string16& expected_character) { + ExpectKeyFiltered(character_composer, key1, flags); + ExpectCharacterComposed(character_composer, key2, key3, flags, + expected_character); + } -// Expects |expected_character| is composed after sequence [key1, key2, key3, -// key 4, key5]. -void ExpectCharacterComposed(CharacterComposer* character_composer, - uint key1, - uint key2, - uint key3, - uint key4, - uint key5, - int flags, - const string16& expected_character) { - ExpectKeyFiltered(character_composer, key1, flags); - ExpectCharacterComposed(character_composer, key2, key3, key4, key5, flags, - expected_character); -} + // Expects |expected_character| is composed after sequence [key1, key2, key3, + // key 4]. + void ExpectCharacterComposed(CharacterComposer* character_composer, + uint key1, + uint key2, + uint key3, + uint key4, + int flags, + const string16& expected_character) { + ExpectKeyFiltered(character_composer, key1, flags); + ExpectCharacterComposed(character_composer, key2, key3, key4, flags, + expected_character); + } -// Expects |expected_character| is composed after sequence [key1, key2, key3, -// key 4, key5, key6]. -void ExpectCharacterComposed(CharacterComposer* character_composer, - uint key1, - uint key2, - uint key3, - uint key4, - uint key5, - uint key6, - int flags, - const string16& expected_character) { - ExpectKeyFiltered(character_composer, key1, flags); - ExpectCharacterComposed(character_composer, key2, key3, key4, key5, key6, - flags, expected_character); -} + // Expects |expected_character| is composed after sequence [key1, key2, key3, + // key 4, key5]. + void ExpectCharacterComposed(CharacterComposer* character_composer, + uint key1, + uint key2, + uint key3, + uint key4, + uint key5, + int flags, + const string16& expected_character) { + ExpectKeyFiltered(character_composer, key1, flags); + ExpectCharacterComposed(character_composer, key2, key3, key4, key5, flags, + expected_character); + } -// Expects |expected_character| is composed after sequence [{key1, keycode1}]. -void ExpectCharacterComposedWithKeyCode(CharacterComposer* character_composer, - uint key1, uint keycode1, - int flags, - const string16& expected_character) { - EXPECT_TRUE(character_composer->FilterKeyPress(key1, keycode1, flags)); - EXPECT_EQ(expected_character, character_composer->composed_character()); -} + // Expects |expected_character| is composed after sequence [key1, key2, key3, + // key 4, key5, key6]. + void ExpectCharacterComposed(CharacterComposer* character_composer, + uint key1, + uint key2, + uint key3, + uint key4, + uint key5, + uint key6, + int flags, + const string16& expected_character) { + ExpectKeyFiltered(character_composer, key1, flags); + ExpectCharacterComposed(character_composer, key2, key3, key4, key5, key6, + flags, expected_character); + } -} // namespace + // Expects |expected_character| is composed after sequence [{key1, keycode1}]. + void ExpectCharacterComposedWithKeyCode(CharacterComposer* character_composer, + uint key1, uint keycode1, + int flags, + const string16& expected_character) { + EXPECT_TRUE(character_composer->FilterKeyPressInternal(key1, keycode1, + flags)); + EXPECT_EQ(expected_character, character_composer->composed_character()); + } +}; -TEST(CharacterComposerTest, InitialState) { +TEST_F(CharacterComposerTest, InitialState) { CharacterComposer character_composer; EXPECT_TRUE(character_composer.composed_character().empty()); } -TEST(CharacterComposerTest, NormalKeyIsNotFiltered) { +TEST_F(CharacterComposerTest, NormalKeyIsNotFiltered) { CharacterComposer character_composer; ExpectKeyNotFiltered(&character_composer, GDK_KEY_B, 0); ExpectKeyNotFiltered(&character_composer, GDK_KEY_Z, 0); @@ -134,22 +150,20 @@ TEST(CharacterComposerTest, NormalKeyIsNotFiltered) { ExpectKeyNotFiltered(&character_composer, GDK_KEY_8, 0); } -TEST(CharacterComposerTest, PartiallyMatchingSequence) { +TEST_F(CharacterComposerTest, PartiallyMatchingSequence) { CharacterComposer character_composer; // Composition with sequence ['dead acute', '1'] will fail. ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); - EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0, 0)); - EXPECT_TRUE(character_composer.composed_character().empty()); + ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0); // Composition with sequence ['dead acute', 'dead circumflex', '1'] will fail. ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); ExpectKeyFiltered(&character_composer, GDK_KEY_dead_circumflex, 0); - EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0, 0)); - EXPECT_TRUE(character_composer.composed_character().empty()); + ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0); } -TEST(CharacterComposerTest, FullyMatchingSequences) { +TEST_F(CharacterComposerTest, FullyMatchingSequences) { CharacterComposer character_composer; // LATIN SMALL LETTER A WITH ACUTE ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0, @@ -175,20 +189,19 @@ TEST(CharacterComposerTest, FullyMatchingSequences) { string16(1, 0x00E7)); } -TEST(CharacterComposerTest, FullyMatchingSequencesAfterMatchingFailure) { +TEST_F(CharacterComposerTest, FullyMatchingSequencesAfterMatchingFailure) { CharacterComposer character_composer; // Composition with sequence ['dead acute', 'dead circumflex', '1'] will fail. ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); ExpectKeyFiltered(&character_composer, GDK_KEY_dead_circumflex, 0); - EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0, 0)); - EXPECT_TRUE(character_composer.composed_character().empty()); + ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0); // LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_dead_circumflex, GDK_KEY_a, 0, string16(1, 0x1EA5)); } -TEST(CharacterComposerTest, ComposedCharacterIsClearedAfterReset) { +TEST_F(CharacterComposerTest, ComposedCharacterIsClearedAfterReset) { CharacterComposer character_composer; ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0, string16(1, 0x00E1)); @@ -196,30 +209,29 @@ TEST(CharacterComposerTest, ComposedCharacterIsClearedAfterReset) { EXPECT_TRUE(character_composer.composed_character().empty()); } -TEST(CharacterComposerTest, CompositionStateIsClearedAfterReset) { +TEST_F(CharacterComposerTest, CompositionStateIsClearedAfterReset) { CharacterComposer character_composer; // Even though sequence ['dead acute', 'a'] will compose 'a with acute', // no character is composed here because of reset. ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); character_composer.Reset(); - EXPECT_FALSE(character_composer.FilterKeyPress(GDK_KEY_a, 0, 0)); - EXPECT_TRUE(character_composer.composed_character().empty()); + ExpectKeyNotFiltered(&character_composer, GDK_KEY_a, 0); } -TEST(CharacterComposerTest, KeySequenceCompositionPreedit) { +TEST_F(CharacterComposerTest, KeySequenceCompositionPreedit) { CharacterComposer character_composer; // LATIN SMALL LETTER A WITH ACUTE // preedit_string() is always empty in key sequence composition mode. ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); EXPECT_TRUE(character_composer.preedit_string().empty()); - EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_a, 0, 0)); + EXPECT_TRUE(FilterKeyPress(&character_composer, GDK_KEY_a, 0, 0)); EXPECT_EQ(string16(1, 0x00E1), character_composer.composed_character()); EXPECT_TRUE(character_composer.preedit_string().empty()); } // ComposeCheckerWithCompactTable in character_composer.cc is depending on the // assumption that the data in gtkimcontextsimpleseqs.h is correctly ordered. -TEST(CharacterComposerTest, MainTableIsCorrectlyOrdered) { +TEST_F(CharacterComposerTest, MainTableIsCorrectlyOrdered) { // This file is included here intentionally, instead of the top of the file, // because including this file at the top of the file will define a // global constant and contaminate the global namespace. @@ -263,7 +275,7 @@ TEST(CharacterComposerTest, MainTableIsCorrectlyOrdered) { } } -TEST(CharacterComposerTest, HexadecimalComposition) { +TEST_F(CharacterComposerTest, HexadecimalComposition) { CharacterComposer character_composer; // HIRAGANA LETTER A (U+3042) ExpectKeyFiltered(&character_composer, GDK_KEY_U, @@ -281,7 +293,7 @@ TEST(CharacterComposerTest, HexadecimalComposition) { arraysize(kMusicalKeyboard))); } -TEST(CharacterComposerTest, HexadecimalCompositionPreedit) { +TEST_F(CharacterComposerTest, HexadecimalCompositionPreedit) { CharacterComposer character_composer; // HIRAGANA LETTER A (U+3042) ExpectKeyFiltered(&character_composer, GDK_KEY_U, @@ -319,7 +331,7 @@ TEST(CharacterComposerTest, HexadecimalCompositionPreedit) { EXPECT_EQ(ASCIIToUTF16(""), character_composer.preedit_string()); } -TEST(CharacterComposerTest, HexadecimalCompositionWithNonHexKey) { +TEST_F(CharacterComposerTest, HexadecimalCompositionWithNonHexKey) { CharacterComposer character_composer; // Sequence [Ctrl+Shift+U, x, space] does not compose a character. @@ -337,7 +349,7 @@ TEST(CharacterComposerTest, HexadecimalCompositionWithNonHexKey) { string16(1, 0x3042)); } -TEST(CharacterComposerTest, HexadecimalCompositionWithAdditionalModifiers) { +TEST_F(CharacterComposerTest, HexadecimalCompositionWithAdditionalModifiers) { CharacterComposer character_composer; // Ctrl+Shift+Alt+U @@ -352,7 +364,7 @@ TEST(CharacterComposerTest, HexadecimalCompositionWithAdditionalModifiers) { EF_SHIFT_DOWN | EF_CONTROL_DOWN | EF_CAPS_LOCK_DOWN); } -TEST(CharacterComposerTest, CancelHexadecimalComposition) { +TEST_F(CharacterComposerTest, CancelHexadecimalComposition) { CharacterComposer character_composer; // Cancel composition with ESC. ExpectKeyFiltered(&character_composer, GDK_KEY_U, @@ -369,7 +381,7 @@ TEST(CharacterComposerTest, CancelHexadecimalComposition) { GDK_KEY_2, GDK_KEY_space, 0, string16(1, 0x3042)); } -TEST(CharacterComposerTest, HexadecimalCompositionWithBackspace) { +TEST_F(CharacterComposerTest, HexadecimalCompositionWithBackspace) { CharacterComposer character_composer; // HIRAGANA LETTER A (U+3042) ExpectKeyFiltered(&character_composer, GDK_KEY_U, @@ -382,7 +394,7 @@ TEST(CharacterComposerTest, HexadecimalCompositionWithBackspace) { GDK_KEY_space, 0, string16(1, 0x3042)); } -TEST(CharacterComposerTest, CancelHexadecimalCompositionWithBackspace) { +TEST_F(CharacterComposerTest, CancelHexadecimalCompositionWithBackspace) { CharacterComposer character_composer; // Backspace just after Ctrl+Shift+U. @@ -400,7 +412,8 @@ TEST(CharacterComposerTest, CancelHexadecimalCompositionWithBackspace) { ExpectKeyNotFiltered(&character_composer, GDK_KEY_3, 0); } -TEST(CharacterComposerTest, HexadecimalCompositionPreeditWithModifierPressed) { +TEST_F(CharacterComposerTest, HexadecimalCompositionPreeditWithModifierPressed) +{ // This test case supposes X Window System uses 101 keyboard layout. CharacterComposer character_composer; const int control_shift = EF_CONTROL_DOWN | EF_SHIFT_DOWN; @@ -456,15 +469,14 @@ TEST(CharacterComposerTest, HexadecimalCompositionPreeditWithModifierPressed) { EXPECT_EQ(ASCIIToUTF16(""), character_composer.preedit_string()); } -TEST(CharacterComposerTest, InvalidHexadecimalSequence) { +TEST_F(CharacterComposerTest, InvalidHexadecimalSequence) { CharacterComposer character_composer; // U+FFFFFFFF ExpectKeyFiltered(&character_composer, GDK_KEY_U, EF_SHIFT_DOWN | EF_CONTROL_DOWN); for (int i = 0; i < 8; ++i) ExpectKeyFiltered(&character_composer, GDK_KEY_f, 0); - EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0, 0)); - EXPECT_TRUE(character_composer.composed_character().empty()); + ExpectKeyFiltered(&character_composer, GDK_KEY_space, 0); // U+0000 (Actually, this is a valid unicode character, but we don't // compose a string with a character '\0') @@ -472,8 +484,7 @@ TEST(CharacterComposerTest, InvalidHexadecimalSequence) { EF_SHIFT_DOWN | EF_CONTROL_DOWN); for (int i = 0; i < 4; ++i) ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0); - EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0, 0)); - EXPECT_TRUE(character_composer.composed_character().empty()); + ExpectKeyFiltered(&character_composer, GDK_KEY_space, 0); // U+10FFFF ExpectKeyFiltered(&character_composer, GDK_KEY_U, @@ -482,8 +493,7 @@ TEST(CharacterComposerTest, InvalidHexadecimalSequence) { ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0); for (int i = 0; i < 4; ++i) ExpectKeyFiltered(&character_composer, GDK_KEY_f, 0); - EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0, 0)); - EXPECT_TRUE(character_composer.composed_character().empty()); + ExpectKeyFiltered(&character_composer, GDK_KEY_space, 0); // U+110000 ExpectKeyFiltered(&character_composer, GDK_KEY_U, @@ -492,11 +502,10 @@ TEST(CharacterComposerTest, InvalidHexadecimalSequence) { ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0); for (int i = 0; i < 4; ++i) ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0); - EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0, 0)); - EXPECT_TRUE(character_composer.composed_character().empty()); + ExpectKeyFiltered(&character_composer, GDK_KEY_space, 0); } -TEST(CharacterComposerTest, HexadecimalSequenceAndDeadKey) { +TEST_F(CharacterComposerTest, HexadecimalSequenceAndDeadKey) { CharacterComposer character_composer; // LATIN SMALL LETTER A WITH ACUTE ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0, @@ -509,15 +518,15 @@ TEST(CharacterComposerTest, HexadecimalSequenceAndDeadKey) { GDK_KEY_space, 0, string16(1, 0x3042)); // LATIN CAPITAL LETTER U WITH ACUTE while 'U' is pressed with Ctrl+Shift. ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); - EXPECT_TRUE(character_composer.FilterKeyPress( - GDK_KEY_U, 0, EF_SHIFT_DOWN | EF_CONTROL_DOWN)); + EXPECT_TRUE(FilterKeyPress(&character_composer, GDK_KEY_U, 0, + EF_SHIFT_DOWN | EF_CONTROL_DOWN)); EXPECT_EQ(string16(1, 0x00DA), character_composer.composed_character()); } -TEST(CharacterComposerTest, BlacklistedKeyeventsTest) { +TEST_F(CharacterComposerTest, BlacklistedKeyeventsTest) { CharacterComposer character_composer; - EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_dead_acute, 0, 0)); - EXPECT_FALSE(character_composer.FilterKeyPress(GDK_KEY_s, 0, 0)); + EXPECT_TRUE(FilterKeyPress(&character_composer, GDK_KEY_dead_acute, 0, 0)); + EXPECT_FALSE(FilterKeyPress(&character_composer, GDK_KEY_s, 0, 0)); ASSERT_EQ(1U, character_composer.composed_character().size()); EXPECT_EQ(GDK_KEY_apostrophe, character_composer.composed_character().at(0)); } diff --git a/ui/base/ime/chromeos/ibus_bridge.cc b/ui/base/ime/chromeos/ibus_bridge.cc index f4ed90fa93..26ec4dbfb2 100644 --- a/ui/base/ime/chromeos/ibus_bridge.cc +++ b/ui/base/ime/chromeos/ibus_bridge.cc @@ -37,6 +37,15 @@ class IBusBridgeImpl : public IBusBridge { } // IBusBridge override. + virtual void InitEngineHandler( + const std::string& engine_id, + IBusEngineHandlerInterface* handler) OVERRIDE { + DCHECK(!engine_id.empty()); + DCHECK(handler); + engine_handler_map_[engine_id] = handler; + } + + // IBusBridge override. virtual IBusEngineHandlerInterface* GetEngineHandler() const OVERRIDE { return engine_handler_; } @@ -47,6 +56,19 @@ class IBusBridgeImpl : public IBusBridge { } // IBusBridge override. + virtual IBusEngineHandlerInterface* SetEngineHandlerById( + const std::string& engine_id) OVERRIDE { + if (engine_id.empty()) { + engine_handler_ = NULL; + return NULL; + } + + DCHECK(engine_handler_map_.find(engine_id) != engine_handler_map_.end()); + engine_handler_ = engine_handler_map_[engine_id]; + return engine_handler_; + } + + // IBusBridge override. virtual IBusPanelCandidateWindowHandlerInterface* GetCandidateWindowHandler() const OVERRIDE { return candidate_window_handler_; @@ -58,31 +80,11 @@ class IBusBridgeImpl : public IBusBridge { candidate_window_handler_ = handler; } - virtual void SetCreateEngineHandler( - const std::string& engine_id, - const CreateEngineHandler& handler) OVERRIDE { - create_engine_handler_map_[engine_id] = handler; - } - - // IBusBridge override. - virtual void UnsetCreateEngineHandler(const std::string& engine_id) OVERRIDE { - create_engine_handler_map_.erase(engine_id); - } - - // IBusBridge override. - virtual void CreateEngine(const std::string& engine_id) OVERRIDE { - // TODO(nona): Change following condition to DCHECK once all legacy IME is - // migrated to extension IME. - if (create_engine_handler_map_[engine_id].is_null()) - return; - create_engine_handler_map_[engine_id].Run(); - } - private: IBusInputContextHandlerInterface* input_context_handler_; IBusEngineHandlerInterface* engine_handler_; IBusPanelCandidateWindowHandlerInterface* candidate_window_handler_; - std::map<std::string, CreateEngineHandler> create_engine_handler_map_; + std::map<std::string, IBusEngineHandlerInterface*> engine_handler_map_; DISALLOW_COPY_AND_ASSIGN(IBusBridgeImpl); }; diff --git a/ui/base/ime/chromeos/ibus_bridge.h b/ui/base/ime/chromeos/ibus_bridge.h index 7a53253d11..e023ee40b9 100644 --- a/ui/base/ime/chromeos/ibus_bridge.h +++ b/ui/base/ime/chromeos/ibus_bridge.h @@ -17,17 +17,11 @@ namespace gfx { class Rect; } // namespace gfx -namespace chromeos { -namespace ibus { -// Following button indicator value is introduced from -// http://developer.gnome.org/gdk/stable/gdk-Event-Structures.html#GdkEventButton -enum IBusMouseButton { - IBUS_MOUSE_BUTTON_LEFT = 1U, - IBUS_MOUSE_BUTTON_MIDDLE = 2U, - IBUS_MOUSE_BUTTON_RIGHT = 3U, -}; -} // namespace ibus +namespace ui { +class KeyEvent; +} // namespace ui +namespace chromeos { namespace input_method { class CandidateWindow; } // namespace input_method @@ -91,23 +85,14 @@ class UI_EXPORT IBusEngineHandlerInterface { // Called when the IME is reset. virtual void Reset() = 0; - // Called when the key event is received. The |keycode| is raw layout - // independent keycode. The |keysym| is result of XLookupString function - // which translate |keycode| to keyboard layout dependent symbol value. + // Called when the key event is received. // Actual implementation must call |callback| after key event handling. - // For example: key press event for 'd' key on us layout and dvorak layout. - // keyval keycode state - // us layout : 0x64 0x20 0x00 - // dvorak layout : 0x65 0x20 0x00 - virtual void ProcessKeyEvent(uint32 keysym, uint32 keycode, uint32 state, + virtual void ProcessKeyEvent(const ui::KeyEvent& key_event, const KeyEventDoneCallback& callback) = 0; // Called when the candidate in lookup table is clicked. The |index| is 0 - // based candidate index in lookup table. The |state| is same value as - // GdkModifierType in - // http://developer.gnome.org/gdk/stable/gdk-Windows.html#GdkModifierType - virtual void CandidateClicked(uint32 index, ibus::IBusMouseButton button, - uint32 state) = 0; + // based candidate index in lookup table. + virtual void CandidateClicked(uint32 index) = 0; // Called when a new surrounding text is set. The |text| is surrounding text // and |cursor_pos| is 0 based index of cursor position in |text|. If there is @@ -159,8 +144,6 @@ class UI_EXPORT IBusPanelCandidateWindowHandlerInterface { // or EngineService) directly by using this class. class UI_EXPORT IBusBridge { public: - typedef base::Callback<void()> CreateEngineHandler; - virtual ~IBusBridge(); // Allocates the global instance. Must be called before any calls to Get(). @@ -181,6 +164,12 @@ class UI_EXPORT IBusBridge { virtual void SetInputContextHandler( IBusInputContextHandlerInterface* handler) = 0; + // Initializes the mapping from |engine_id| to |handler|. + // |engine_id| must not be empty and |handler| must not be null. + virtual void InitEngineHandler( + const std::string& engine_id, + IBusEngineHandlerInterface* handler) = 0; + // Returns current EngineHandler. This function returns NULL if current engine // is not ready to use. virtual IBusEngineHandlerInterface* GetEngineHandler() const = 0; @@ -189,6 +178,12 @@ class UI_EXPORT IBusBridge { // NULL for |handler|. Caller must release |handler|. virtual void SetEngineHandler(IBusEngineHandlerInterface* handler) = 0; + // Updates current EngineHandler by Engine ID. If there is no active + // engine service, pass an empty string for |engine_id|. The set + // IBusEngineHandlerInterface is returned. + virtual IBusEngineHandlerInterface* SetEngineHandlerById( + const std::string& engine_id) = 0; + // Returns current CandidateWindowHandler. This function returns NULL if // current candidate window is not ready to use. virtual IBusPanelCandidateWindowHandlerInterface* @@ -199,20 +194,6 @@ class UI_EXPORT IBusBridge { virtual void SetCandidateWindowHandler( IBusPanelCandidateWindowHandlerInterface* handler) = 0; - // Sets create engine handler for |engine_id|. |engine_id| must not be empty - // and |handler| must not be null. - virtual void SetCreateEngineHandler( - const std::string& engine_id, - const CreateEngineHandler& handler) = 0; - - // Unsets create engine handler for |engine_id|. |engine_id| must not be - // empty. - virtual void UnsetCreateEngineHandler(const std::string& engine_id) = 0; - - // Creates engine. Do not call this function before SetCreateEngineHandler - // call with |engine_id|. - virtual void CreateEngine(const std::string& engine_id) = 0; - protected: IBusBridge(); diff --git a/ui/base/ime/chromeos/mock_ime_engine_handler.cc b/ui/base/ime/chromeos/mock_ime_engine_handler.cc index d7e664ffe4..f5e17238ee 100644 --- a/ui/base/ime/chromeos/mock_ime_engine_handler.cc +++ b/ui/base/ime/chromeos/mock_ime_engine_handler.cc @@ -15,10 +15,7 @@ MockIMEEngineHandler::MockIMEEngineHandler() last_text_input_context_(ui::TEXT_INPUT_TYPE_NONE, ui::TEXT_INPUT_MODE_DEFAULT), last_set_surrounding_cursor_pos_(0), - last_set_surrounding_anchor_pos_(0), - last_processed_keysym_(0), - last_processed_keycode_(0), - last_processed_state_(0) { + last_set_surrounding_anchor_pos_(0) { } MockIMEEngineHandler::~MockIMEEngineHandler() { @@ -48,20 +45,14 @@ void MockIMEEngineHandler::Reset() { } void MockIMEEngineHandler::ProcessKeyEvent( - uint32 keysym, - uint32 keycode, - uint32 state, + const ui::KeyEvent& key_event, const KeyEventDoneCallback& callback) { ++process_key_event_call_count_; - last_processed_keysym_ = keysym; - last_processed_keycode_ = keycode; - last_processed_state_ = state; + last_processed_key_event_.reset(new ui::KeyEvent(key_event)); last_passed_callback_ = callback; } -void MockIMEEngineHandler::CandidateClicked(uint32 index, - ibus::IBusMouseButton button, - uint32 state) { +void MockIMEEngineHandler::CandidateClicked(uint32 index) { } void MockIMEEngineHandler::SetSurroundingText(const std::string& text, diff --git a/ui/base/ime/chromeos/mock_ime_engine_handler.h b/ui/base/ime/chromeos/mock_ime_engine_handler.h index 56fc259643..3626ca5e91 100644 --- a/ui/base/ime/chromeos/mock_ime_engine_handler.h +++ b/ui/base/ime/chromeos/mock_ime_engine_handler.h @@ -7,6 +7,7 @@ #include "ui/base/ime/chromeos/ibus_bridge.h" #include "ui/base/ui_export.h" +#include "ui/events/event.h" namespace chromeos { @@ -21,10 +22,9 @@ class UI_EXPORT MockIMEEngineHandler : public IBusEngineHandlerInterface { virtual void Disable() OVERRIDE; virtual void PropertyActivate(const std::string& property_name) OVERRIDE; virtual void Reset() OVERRIDE; - virtual void ProcessKeyEvent(uint32 keysym, uint32 keycode, uint32 state, + virtual void ProcessKeyEvent(const ui::KeyEvent& key_event, const KeyEventDoneCallback& callback) OVERRIDE; - virtual void CandidateClicked(uint32 index, ibus::IBusMouseButton button, - uint32 state) OVERRIDE; + virtual void CandidateClicked(uint32 index) OVERRIDE; virtual void SetSurroundingText(const std::string& text, uint32 cursor_pos, uint32 anchor_pos) OVERRIDE; @@ -58,16 +58,8 @@ class UI_EXPORT MockIMEEngineHandler : public IBusEngineHandlerInterface { return last_set_surrounding_anchor_pos_; } - uint32 last_processed_keysym() const { - return last_processed_keysym_; - } - - uint32 last_processed_keycode() const { - return last_processed_keycode_; - } - - uint32 last_processed_state() const { - return last_processed_state_; + const ui::KeyEvent* last_processed_key_event() const { + return last_processed_key_event_.get(); } const KeyEventDoneCallback& last_passed_callback() const { @@ -85,9 +77,7 @@ class UI_EXPORT MockIMEEngineHandler : public IBusEngineHandlerInterface { std::string last_set_surrounding_text_; uint32 last_set_surrounding_cursor_pos_; uint32 last_set_surrounding_anchor_pos_; - uint32 last_processed_keysym_; - uint32 last_processed_keycode_; - uint32 last_processed_state_; + scoped_ptr<ui::KeyEvent> last_processed_key_event_; KeyEventDoneCallback last_passed_callback_; }; diff --git a/ui/base/ime/composition_text.h b/ui/base/ime/composition_text.h index 5beaffc0eb..7d728635e3 100644 --- a/ui/base/ime/composition_text.h +++ b/ui/base/ime/composition_text.h @@ -36,7 +36,7 @@ struct UI_EXPORT CompositionText { void Clear(); // Content of the composition text. - string16 text; + base::string16 text; // Underline information of the composition text. // They must be sorted in ascending order by their start_offset and cannot be diff --git a/ui/base/ime/fake_input_method.cc b/ui/base/ime/fake_input_method.cc deleted file mode 100644 index 93eb38d552..0000000000 --- a/ui/base/ime/fake_input_method.cc +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright (c) 2012 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. - -#include "ui/base/ime/fake_input_method.h" - -#include "base/logging.h" -#include "base/strings/string16.h" -#include "ui/base/glib/glib_integers.h" -#include "ui/base/ime/input_method_delegate.h" -#include "ui/base/ime/text_input_client.h" -#include "ui/events/event.h" -#include "ui/events/event_constants.h" -#include "ui/events/event_utils.h" -#include "ui/events/keycodes/keyboard_code_conversion.h" - -#if defined(USE_X11) -#include <X11/X.h> -#include <X11/Xlib.h> -#include <X11/Xutil.h> -#include "ui/events/keycodes/keyboard_code_conversion_x.h" -#endif - -namespace { - -#if defined(USE_X11) -uint32 EventFlagsFromXFlags(unsigned int flags) { - return (flags & LockMask ? ui::EF_CAPS_LOCK_DOWN : 0U) | - (flags & ControlMask ? ui::EF_CONTROL_DOWN : 0U) | - (flags & ShiftMask ? ui::EF_SHIFT_DOWN : 0U) | - (flags & Mod1Mask ? ui::EF_ALT_DOWN : 0U); -} -#endif - -} // namespace - -namespace ui { - -FakeInputMethod::FakeInputMethod(internal::InputMethodDelegate* delegate) - : delegate_(NULL), - text_input_client_(NULL) { - SetDelegate(delegate); -} - -FakeInputMethod::~FakeInputMethod() { -} - -void FakeInputMethod::SetDelegate(internal::InputMethodDelegate* delegate) { - delegate_ = delegate; -} - -void FakeInputMethod::SetFocusedTextInputClient(TextInputClient* client) { - text_input_client_ = client; - FOR_EACH_OBSERVER(InputMethodObserver, observers_, - OnTextInputStateChanged(client)); -} - -void FakeInputMethod::DetachTextInputClient(TextInputClient* client) { - if (text_input_client_ == client) { - text_input_client_ = NULL; - FOR_EACH_OBSERVER(InputMethodObserver, observers_, - OnTextInputStateChanged(client)); - } -} - -TextInputClient* FakeInputMethod::GetTextInputClient() const { - return text_input_client_; -} - -bool FakeInputMethod::DispatchKeyEvent(const ui::KeyEvent& event) { - if (!event.HasNativeEvent()) - return DispatchFabricatedKeyEvent(event); - - const base::NativeEvent& native_event = event.native_event(); - bool handled = false; -#if defined(OS_WIN) - if (native_event.message == WM_CHAR) { - if (text_input_client_) { - text_input_client_->InsertChar(ui::KeyboardCodeFromNative(native_event), - ui::EventFlagsFromNative(native_event)); - handled = true; - } - } else { - handled = delegate_->DispatchKeyEventPostIME(native_event); - } -#elif defined(USE_X11) - DCHECK(native_event); - if (native_event->type == KeyRelease) { - // On key release, just dispatch it. - handled = delegate_->DispatchKeyEventPostIME(native_event); - } else { - const uint32 state = EventFlagsFromXFlags(native_event->xkey.state); - // Send a RawKeyDown event first, - handled = delegate_->DispatchKeyEventPostIME(native_event); - if (text_input_client_) { - // then send a Char event via ui::TextInputClient. - const KeyboardCode key_code = ui::KeyboardCodeFromNative(native_event); - uint16 ch = 0; - if (!(state & ui::EF_CONTROL_DOWN)) - ch = ui::GetCharacterFromXEvent(native_event); - if (!ch) - ch = ui::GetCharacterFromKeyCode(key_code, state); - if (ch) - text_input_client_->InsertChar(ch, state); - } - } -#elif defined(USE_OZONE) - DCHECK(native_event); - if (EventTypeFromNative(native_event) == ET_KEY_RELEASED) { - // On key release, just dispatch it. - handled = delegate_->DispatchKeyEventPostIME(native_event); - } else { - const uint32 state = EventFlagsFromNative(native_event); - // Send a RawKeyDown event first, - handled = delegate_->DispatchKeyEventPostIME(native_event); - if (text_input_client_) { - // then send a Char event via ui::TextInputClient. - const KeyboardCode key_code = ui::KeyboardCodeFromNative(native_event); - uint16 ch = 0; - - // TODO(vignatti): Support EF_CONTROL_DOWN state - - ch = ui::GetCharacterFromKeyCode(key_code, state); - if (ch) - text_input_client_->InsertChar(ch, state); - } - } -#else - // TODO(yusukes): Support other platforms. Call InsertChar() when necessary. - handled = delegate_->DispatchKeyEventPostIME(native_event); -#endif - return handled; -} - -bool FakeInputMethod::DispatchFabricatedKeyEvent(const ui::KeyEvent& event) { - bool handled = delegate_->DispatchFabricatedKeyEventPostIME( - event.type(), event.key_code(), event.flags()); - if (event.type() == ET_KEY_PRESSED && text_input_client_) { - uint16 ch = event.GetCharacter(); - if (ch) - text_input_client_->InsertChar(ch, event.flags()); - } - return handled; -} - -void FakeInputMethod::Init(bool focused) {} -void FakeInputMethod::OnFocus() {} -void FakeInputMethod::OnBlur() {} -bool FakeInputMethod::OnUntranslatedIMEMessage(const base::NativeEvent& event, - NativeEventResult* result) { - return false; -} -void FakeInputMethod::OnTextInputTypeChanged(const TextInputClient* client) { - FOR_EACH_OBSERVER(InputMethodObserver, observers_, - OnTextInputStateChanged(client)); -} -void FakeInputMethod::OnCaretBoundsChanged(const TextInputClient* client) {} -void FakeInputMethod::CancelComposition(const TextInputClient* client) {} -void FakeInputMethod::OnInputLocaleChanged() {} - -std::string FakeInputMethod::GetInputLocale() { - return ""; -} - -base::i18n::TextDirection FakeInputMethod::GetInputTextDirection() { - return base::i18n::UNKNOWN_DIRECTION; -} - -bool FakeInputMethod::IsActive() { - return true; -} - -bool FakeInputMethod::IsCandidatePopupOpen() const { - return false; -} - -TextInputType FakeInputMethod::GetTextInputType() const { - return TEXT_INPUT_TYPE_NONE; -} - -TextInputMode FakeInputMethod::GetTextInputMode() const { - return TEXT_INPUT_MODE_DEFAULT; -} - -bool FakeInputMethod::CanComposeInline() const { - return true; -} - -void FakeInputMethod::AddObserver(InputMethodObserver* observer) { - observers_.AddObserver(observer); -} - -void FakeInputMethod::RemoveObserver(InputMethodObserver* observer) { - observers_.RemoveObserver(observer); -} - -} // namespace ui diff --git a/ui/base/ime/fake_input_method.h b/ui/base/ime/fake_input_method.h deleted file mode 100644 index 7bc44ee781..0000000000 --- a/ui/base/ime/fake_input_method.h +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2012 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. - -#ifndef UI_BASE_IME_FAKE_INPUT_METHOD_H_ -#define UI_BASE_IME_FAKE_INPUT_METHOD_H_ - -#include <string> - -#include "base/basictypes.h" -#include "base/compiler_specific.h" -#include "base/observer_list.h" -#include "ui/base/ime/input_method.h" -#include "ui/base/ime/input_method_observer.h" -#include "ui/base/ui_export.h" - -namespace ui { - -class InputMethodObserver; -class KeyEvent; -class TextInputClient; - -// A fake ui::InputMethod implementation for minimum input support. -class UI_EXPORT FakeInputMethod : NON_EXPORTED_BASE(public InputMethod) { - public: - explicit FakeInputMethod(internal::InputMethodDelegate* delegate); - virtual ~FakeInputMethod(); - - // Overriden from InputMethod. - virtual void SetDelegate(internal::InputMethodDelegate* delegate) OVERRIDE; - virtual void Init(bool focused) OVERRIDE; - virtual void OnFocus() OVERRIDE; - virtual void OnBlur() OVERRIDE; - virtual bool OnUntranslatedIMEMessage(const base::NativeEvent& event, - NativeEventResult* result) OVERRIDE; - virtual void SetFocusedTextInputClient(TextInputClient* client) OVERRIDE; - virtual void DetachTextInputClient(TextInputClient* client) OVERRIDE; - virtual TextInputClient* GetTextInputClient() const OVERRIDE; - virtual bool DispatchKeyEvent(const ui::KeyEvent& event) OVERRIDE; - virtual void OnTextInputTypeChanged(const TextInputClient* client) OVERRIDE; - virtual void OnCaretBoundsChanged(const TextInputClient* client) OVERRIDE; - virtual void CancelComposition(const TextInputClient* client) OVERRIDE; - virtual void OnInputLocaleChanged() OVERRIDE; - virtual std::string GetInputLocale() OVERRIDE; - virtual base::i18n::TextDirection GetInputTextDirection() OVERRIDE; - virtual bool IsActive() OVERRIDE; - virtual TextInputType GetTextInputType() const OVERRIDE; - virtual TextInputMode GetTextInputMode() const OVERRIDE; - virtual bool CanComposeInline() const OVERRIDE; - virtual bool IsCandidatePopupOpen() const OVERRIDE; - virtual void AddObserver(InputMethodObserver* observer) OVERRIDE; - virtual void RemoveObserver(InputMethodObserver* observer) OVERRIDE; - - private: - bool DispatchFabricatedKeyEvent(const ui::KeyEvent& event); - - internal::InputMethodDelegate* delegate_; - TextInputClient* text_input_client_; - ObserverList<InputMethodObserver> observers_; - - DISALLOW_COPY_AND_ASSIGN(FakeInputMethod); -}; - -} // namespace ui - -#endif // UI_BASE_IME_FAKE_INPUT_METHOD_H_ diff --git a/ui/base/ime/ime.gypi b/ui/base/ime/ime.gypi index 8d34f2f3e6..7d52d9d783 100644 --- a/ui/base/ime/ime.gypi +++ b/ui/base/ime/ime.gypi @@ -3,9 +3,12 @@ # found in the LICENSE file. { + 'dependencies' : [ + '<(DEPTH)/ui/events/events.gyp:events', + ], 'sources': [ - 'character_composer.cc', - 'character_composer.h', + 'chromeos/character_composer.cc', + 'chromeos/character_composer.h', 'chromeos/ibus_bridge.cc', 'chromeos/ibus_bridge.h', 'chromeos/mock_ime_candidate_window_handler.cc', @@ -21,8 +24,6 @@ 'composition_underline.h', 'dummy_input_method_delegate.cc', 'dummy_input_method_delegate.h', - 'fake_input_method.cc', - 'fake_input_method.h', 'input_method.h', 'input_method_base.cc', 'input_method_base.h', @@ -35,8 +36,10 @@ 'input_method_imm32.h', 'input_method_initializer.cc', 'input_method_initializer.h', - 'input_method_linux_x11.cc', - 'input_method_linux_x11.h', + 'input_method_auralinux.cc', + 'input_method_auralinux.h', + 'input_method_minimal.cc', + 'input_method_minimal.h', 'input_method_observer.h', 'input_method_tsf.cc', 'input_method_tsf.h', @@ -71,24 +74,14 @@ 'conditions': [ ['toolkit_views==0 and use_aura==0', { 'sources!': [ - 'fake_input_method.cc', - 'fake_input_method.h', 'input_method_factory.cc', 'input_method_factory.h', + 'input_method_minimal.cc', + 'input_method_minimal.h', ], }], ['chromeos==0 or use_x11==0', { 'sources!': [ - 'character_composer.cc', - 'character_composer.h', - 'chromeos/ibus_bridge.cc', - 'chromeos/ibus_bridge.h', - 'chromeos/mock_ime_candidate_window_handler.cc', - 'chromeos/mock_ime_candidate_window_handler.h', - 'chromeos/mock_ime_engine_handler.cc', - 'chromeos/mock_ime_engine_handler.h', - 'chromeos/mock_ime_input_context_handler.cc', - 'chromeos/mock_ime_input_context_handler.h', 'input_method_ibus.cc', 'input_method_ibus.h', ], @@ -106,10 +99,10 @@ 'input_method_tsf.h', ], }], - ['use_aura==0 or use_x11==0 or desktop_linux==0', { + ['use_aura==0 or desktop_linux==0', { 'sources!': [ - 'input_method_linux_x11.cc', - 'input_method_linux_x11.h', + 'input_method_auralinux.cc', + 'input_method_auralinux.h', ], }], ['use_aura==0 or desktop_linux==0', { diff --git a/ui/base/ime/ime_unittests.gypi b/ui/base/ime/ime_unittests.gypi index 9a881bab4d..779764800d 100644 --- a/ui/base/ime/ime_unittests.gypi +++ b/ui/base/ime/ime_unittests.gypi @@ -4,7 +4,7 @@ { 'sources': [ - 'character_composer_unittest.cc', + 'chromeos/character_composer_unittest.cc', 'composition_text_util_pango_unittest.cc', 'input_method_base_unittest.cc', 'input_method_ibus_unittest.cc', @@ -16,7 +16,7 @@ 'conditions': [ ['chromeos==0 or use_x11==0', { 'sources!': [ - 'character_composer_unittest.cc', + 'chromeos/character_composer_unittest.cc', 'input_method_ibus_unittest.cc', ], }], diff --git a/ui/base/ime/input_method.h b/ui/base/ime/input_method.h index 53c3c37b71..33c7beaed5 100644 --- a/ui/base/ime/input_method.h +++ b/ui/base/ime/input_method.h @@ -12,8 +12,6 @@ #include "base/i18n/rtl.h" #include "ui/base/ime/text_input_mode.h" #include "ui/base/ime/text_input_type.h" -#include "ui/base/ui_export.h" -#include "ui/events/keycodes/keyboard_codes.h" namespace ui { diff --git a/ui/base/ime/input_method_linux_x11.cc b/ui/base/ime/input_method_auralinux.cc index 2059e6e9b5..4b996fb089 100644 --- a/ui/base/ime/input_method_linux_x11.cc +++ b/ui/base/ime/input_method_auralinux.cc @@ -2,27 +2,25 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ui/base/ime/input_method_linux_x11.h" +#include "ui/base/ime/input_method_auralinux.h" #include "base/environment.h" #include "ui/base/ime/linux/linux_input_method_context_factory.h" #include "ui/base/ime/text_input_client.h" #include "ui/events/event.h" -#include "ui/events/event_utils.h" -#include "ui/events/keycodes/keyboard_code_conversion.h" -#include "ui/events/keycodes/keyboard_code_conversion_x.h" namespace ui { -InputMethodLinuxX11::InputMethodLinuxX11( +InputMethodAuraLinux::InputMethodAuraLinux( internal::InputMethodDelegate* delegate) { SetDelegate(delegate); } -InputMethodLinuxX11::~InputMethodLinuxX11() {} +InputMethodAuraLinux::~InputMethodAuraLinux() {} // static -void InputMethodLinuxX11::Initialize() { +void InputMethodAuraLinux::Initialize() { +#if (USE_X11) // Force a IBus IM context to run in synchronous mode. // // Background: IBus IM context runs by default in asynchronous mode. In @@ -47,11 +45,12 @@ void InputMethodLinuxX11::Initialize() { // ui::InitializeInputMethod(). scoped_ptr<base::Environment> env(base::Environment::Create()); env->SetVar("IBUS_ENABLE_SYNC_MODE", "1"); +#endif } // Overriden from InputMethod. -void InputMethodLinuxX11::Init(bool focused) { +void InputMethodAuraLinux::Init(bool focused) { CHECK(LinuxInputMethodContextFactory::instance()); input_method_context_ = LinuxInputMethodContextFactory::instance()->CreateInputMethodContext( @@ -68,34 +67,34 @@ void InputMethodLinuxX11::Init(bool focused) { } } -bool InputMethodLinuxX11::OnUntranslatedIMEMessage( +bool InputMethodAuraLinux::OnUntranslatedIMEMessage( const base::NativeEvent& event, NativeEventResult* result) { return false; } -bool InputMethodLinuxX11::DispatchKeyEvent(const ui::KeyEvent& event) { +bool InputMethodAuraLinux::DispatchKeyEvent(const ui::KeyEvent& event) { DCHECK(event.type() == ET_KEY_PRESSED || event.type() == ET_KEY_RELEASED); DCHECK(system_toplevel_window_focused()); - if (!event.HasNativeEvent()) - return DispatchFabricatedKeyEvent(event); - // If no text input client, do nothing. - const base::NativeEvent& native_key_event = event.native_event(); if (!GetTextInputClient()) - return DispatchKeyEventPostIME(native_key_event); + return DispatchKeyEventPostIME(event); // Let an IME handle the key event first. - if (input_method_context_->DispatchKeyEvent(native_key_event)) { - if (event.type() == ET_KEY_PRESSED) - DispatchFabricatedKeyEventPostIME(ET_KEY_PRESSED, VKEY_PROCESSKEY, - event.flags()); + if (input_method_context_->DispatchKeyEvent(event)) { + if (event.type() == ET_KEY_PRESSED) { + const ui::KeyEvent fabricated_event(ET_KEY_PRESSED, + VKEY_PROCESSKEY, + event.flags(), + false); // is_char + DispatchKeyEventPostIME(fabricated_event); + } return true; } // Otherwise, insert the character. - const bool handled = DispatchKeyEventPostIME(native_key_event); + const bool handled = DispatchKeyEventPostIME(event); if (event.type() == ET_KEY_PRESSED && GetTextInputClient()) { const uint16 ch = event.GetCharacter(); if (ch) { @@ -106,7 +105,7 @@ bool InputMethodLinuxX11::DispatchKeyEvent(const ui::KeyEvent& event) { return handled; } -void InputMethodLinuxX11::OnTextInputTypeChanged( +void InputMethodAuraLinux::OnTextInputTypeChanged( const TextInputClient* client) { if (!IsTextInputClientFocused(client)) return; @@ -115,67 +114,67 @@ void InputMethodLinuxX11::OnTextInputTypeChanged( input_method_context_->OnTextInputTypeChanged(client->GetTextInputType()); } -void InputMethodLinuxX11::OnCaretBoundsChanged(const TextInputClient* client) { +void InputMethodAuraLinux::OnCaretBoundsChanged(const TextInputClient* client) { if (!IsTextInputClientFocused(client)) return; input_method_context_->OnCaretBoundsChanged( GetTextInputClient()->GetCaretBounds()); } -void InputMethodLinuxX11::CancelComposition(const TextInputClient* client) { +void InputMethodAuraLinux::CancelComposition(const TextInputClient* client) { if (!IsTextInputClientFocused(client)) return; input_method_context_->Reset(); input_method_context_->OnTextInputTypeChanged(client->GetTextInputType()); } -void InputMethodLinuxX11::OnInputLocaleChanged() { +void InputMethodAuraLinux::OnInputLocaleChanged() { } -std::string InputMethodLinuxX11::GetInputLocale() { +std::string InputMethodAuraLinux::GetInputLocale() { return ""; } -base::i18n::TextDirection InputMethodLinuxX11::GetInputTextDirection() { +base::i18n::TextDirection InputMethodAuraLinux::GetInputTextDirection() { return input_method_context_->GetInputTextDirection(); } -bool InputMethodLinuxX11::IsActive() { - // InputMethodLinuxX11 is always ready and up. +bool InputMethodAuraLinux::IsActive() { + // InputMethodAuraLinux is always ready and up. return true; } -bool InputMethodLinuxX11::IsCandidatePopupOpen() const { +bool InputMethodAuraLinux::IsCandidatePopupOpen() const { // There seems no way to detect candidate windows or any popups. return false; } // Overriden from ui::LinuxInputMethodContextDelegate -void InputMethodLinuxX11::OnCommit(const base::string16& text) { +void InputMethodAuraLinux::OnCommit(const base::string16& text) { TextInputClient* text_input_client = GetTextInputClient(); if (text_input_client) text_input_client->InsertText(text); } -void InputMethodLinuxX11::OnPreeditChanged( +void InputMethodAuraLinux::OnPreeditChanged( const CompositionText& composition_text) { TextInputClient* text_input_client = GetTextInputClient(); if (text_input_client) text_input_client->SetCompositionText(composition_text); } -void InputMethodLinuxX11::OnPreeditEnd() { +void InputMethodAuraLinux::OnPreeditEnd() { TextInputClient* text_input_client = GetTextInputClient(); if (text_input_client && text_input_client->HasCompositionText()) text_input_client->ClearCompositionText(); } -void InputMethodLinuxX11::OnPreeditStart() {} +void InputMethodAuraLinux::OnPreeditStart() {} // Overridden from InputMethodBase. -void InputMethodLinuxX11::OnDidChangeFocusedClient( +void InputMethodAuraLinux::OnDidChangeFocusedClient( TextInputClient* focused_before, TextInputClient* focused) { input_method_context_->Reset(); @@ -185,25 +184,4 @@ void InputMethodLinuxX11::OnDidChangeFocusedClient( InputMethodBase::OnDidChangeFocusedClient(focused_before, focused); } -// private - -bool InputMethodLinuxX11::DispatchFabricatedKeyEvent( - const ui::KeyEvent& event) { - // Let a post IME handler handle the key event. - if (DispatchFabricatedKeyEventPostIME(event.type(), event.key_code(), - event.flags())) - return true; - - // Otherwise, insert the character. - if (event.type() == ET_KEY_PRESSED && GetTextInputClient()) { - const uint16 ch = event.GetCharacter(); - if (ch) { - GetTextInputClient()->InsertChar(ch, event.flags()); - return true; - } - } - - return false; -} - } // namespace ui diff --git a/ui/base/ime/input_method_linux_x11.h b/ui/base/ime/input_method_auralinux.h index 34ca3833f0..87222a7bd0 100644 --- a/ui/base/ime/input_method_linux_x11.h +++ b/ui/base/ime/input_method_auralinux.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef UI_BASE_IME_INPUT_METHOD_LINUX_X11_H_ -#define UI_BASE_IME_INPUT_METHOD_LINUX_X11_H_ +#ifndef UI_BASE_IME_INPUT_METHOD_AURALINUX_H_ +#define UI_BASE_IME_INPUT_METHOD_AURALINUX_H_ #include "base/memory/scoped_ptr.h" #include "ui/base/ime/input_method_base.h" @@ -11,14 +11,14 @@ namespace ui { -// A ui::InputMethod implementation for a X11 event loop on GNU/Linux. -// This class is not designed for supporting CrOS. The implementation details -// are separated to ui::LinuxInputMethodContext interface. -class InputMethodLinuxX11 : public InputMethodBase, - public LinuxInputMethodContextDelegate { +// A ui::InputMethod implementation for Aura on Linux platforms. The +// implementation details are separated to ui::LinuxInputMethodContext +// interface. +class InputMethodAuraLinux : public InputMethodBase, + public LinuxInputMethodContextDelegate { public: - explicit InputMethodLinuxX11(internal::InputMethodDelegate* delegate); - virtual ~InputMethodLinuxX11(); + explicit InputMethodAuraLinux(internal::InputMethodDelegate* delegate); + virtual ~InputMethodAuraLinux(); // Initializes input methods. This function must be called once prior to // any use of this instance. This function is supposed to be called from @@ -51,14 +51,11 @@ class InputMethodLinuxX11 : public InputMethodBase, virtual void OnDidChangeFocusedClient(TextInputClient* focused_before, TextInputClient* focused) OVERRIDE; - private: - bool DispatchFabricatedKeyEvent(const ui::KeyEvent& event); - scoped_ptr<LinuxInputMethodContext> input_method_context_; - DISALLOW_COPY_AND_ASSIGN(InputMethodLinuxX11); + DISALLOW_COPY_AND_ASSIGN(InputMethodAuraLinux); }; } // namespace ui -#endif // UI_BASE_IME_INPUT_METHOD_LINUX_X11_H_ +#endif // UI_BASE_IME_INPUT_METHOD_AURALINUX_H_ diff --git a/ui/base/ime/input_method_base.cc b/ui/base/ime/input_method_base.cc index 0a9552289d..d88fccfc6f 100644 --- a/ui/base/ime/input_method_base.cc +++ b/ui/base/ime/input_method_base.cc @@ -4,10 +4,13 @@ #include "ui/base/ime/input_method_base.h" +#include "base/bind.h" #include "base/logging.h" +#include "base/message_loop/message_loop.h" #include "ui/base/ime/input_method_delegate.h" #include "ui/base/ime/input_method_observer.h" #include "ui/base/ime/text_input_client.h" +#include "ui/events/event.h" namespace ui { @@ -100,15 +103,15 @@ void InputMethodBase::OnInputMethodChanged() const { } bool InputMethodBase::DispatchKeyEventPostIME( - const base::NativeEvent& native_event) const { - return delegate_ ? delegate_->DispatchKeyEventPostIME(native_event) : false; -} + const ui::KeyEvent& event) const { + if (!delegate_) + return false; + + if (!event.HasNativeEvent()) + return delegate_->DispatchFabricatedKeyEventPostIME( + event.type(), event.key_code(), event.flags()); -bool InputMethodBase::DispatchFabricatedKeyEventPostIME(EventType type, - KeyboardCode key_code, - int flags) const { - return delegate_ ? delegate_->DispatchFabricatedKeyEventPostIME - (type, key_code, flags) : false; + return delegate_->DispatchKeyEventPostIME(event.native_event()); } void InputMethodBase::NotifyTextInputStateChanged( @@ -129,4 +132,38 @@ void InputMethodBase::SetFocusedTextInputClientInternal( NotifyTextInputStateChanged(text_input_client_); } +void InputMethodBase::OnCandidateWindowShown() { + base::MessageLoop::current()->PostTask( + FROM_HERE, + base::Bind(&InputMethodBase::CandidateWindowShownCallback, AsWeakPtr())); +} + +void InputMethodBase::OnCandidateWindowUpdated() { + base::MessageLoop::current()->PostTask( + FROM_HERE, + base::Bind(&InputMethodBase::CandidateWindowUpdatedCallback, + AsWeakPtr())); +} + +void InputMethodBase::OnCandidateWindowHidden() { + base::MessageLoop::current()->PostTask( + FROM_HERE, + base::Bind(&InputMethodBase::CandidateWindowHiddenCallback, AsWeakPtr())); +} + +void InputMethodBase::CandidateWindowShownCallback() { + if (text_input_client_) + text_input_client_->OnCandidateWindowShown(); +} + +void InputMethodBase::CandidateWindowUpdatedCallback() { + if (text_input_client_) + text_input_client_->OnCandidateWindowUpdated(); +} + +void InputMethodBase::CandidateWindowHiddenCallback() { + if (text_input_client_) + text_input_client_->OnCandidateWindowHidden(); +} + } // namespace ui diff --git a/ui/base/ime/input_method_base.h b/ui/base/ime/input_method_base.h index 3e180a37fa..10ac88dcef 100644 --- a/ui/base/ime/input_method_base.h +++ b/ui/base/ime/input_method_base.h @@ -7,10 +7,10 @@ #include "base/basictypes.h" #include "base/compiler_specific.h" +#include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "ui/base/ime/input_method.h" #include "ui/base/ui_export.h" -#include "ui/events/event_constants.h" namespace gfx { class Rect; @@ -19,11 +19,14 @@ class Rect; namespace ui { class InputMethodObserver; +class KeyEvent; class TextInputClient; // A helper class providing functionalities shared among ui::InputMethod // implementations. -class UI_EXPORT InputMethodBase : NON_EXPORTED_BASE(public InputMethod) { +class UI_EXPORT InputMethodBase + : NON_EXPORTED_BASE(public InputMethod), + public base::SupportsWeakPtr<InputMethodBase> { public: InputMethodBase(); virtual ~InputMethodBase(); @@ -72,18 +75,19 @@ class UI_EXPORT InputMethodBase : NON_EXPORTED_BASE(public InputMethod) { // Convenience method to call delegate_->DispatchKeyEventPostIME(). // Returns true if the event was processed - bool DispatchKeyEventPostIME(const base::NativeEvent& native_event) const; - - // Convenience method to call delegate_->DispatchFabricatedKeyEventPostIME(). - // Returns true if the event was processed - // TODO(komatsu): Unify this function to DispatchKeyEventPostIME. - bool DispatchFabricatedKeyEventPostIME(EventType type, - KeyboardCode key_code, - int flags) const; + bool DispatchKeyEventPostIME(const ui::KeyEvent& event) const; // Convenience method to notify all observers of TextInputClient changes. void NotifyTextInputStateChanged(const TextInputClient* client); + // Interface for for signalling candidate window events. + // See also *Callback functions below. To avoid reentrancy issue that + // TextInputClient manipulates IME state during even handling, these methods + // defer sending actual signals to renderer. + void OnCandidateWindowShown(); + void OnCandidateWindowUpdated(); + void OnCandidateWindowHidden(); + bool system_toplevel_window_focused() const { return system_toplevel_window_focused_; } @@ -91,6 +95,12 @@ class UI_EXPORT InputMethodBase : NON_EXPORTED_BASE(public InputMethod) { private: void SetFocusedTextInputClientInternal(TextInputClient* client); + // Deferred callbacks for signalling TextInputClient about candidate window + // appearance changes. + void CandidateWindowShownCallback(); + void CandidateWindowUpdatedCallback(); + void CandidateWindowHiddenCallback(); + internal::InputMethodDelegate* delegate_; TextInputClient* text_input_client_; diff --git a/ui/base/ime/input_method_base_unittest.cc b/ui/base/ime/input_method_base_unittest.cc index e065306f23..ac80b1406f 100644 --- a/ui/base/ime/input_method_base_unittest.cc +++ b/ui/base/ime/input_method_base_unittest.cc @@ -4,6 +4,10 @@ #include "ui/base/ime/input_method_base.h" +#include "base/gtest_prod_util.h" +#include "base/memory/scoped_ptr.h" +#include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "base/scoped_observer.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/ime/dummy_text_input_client.h" @@ -110,11 +114,30 @@ class ClientChangeVerifier { DISALLOW_COPY_AND_ASSIGN(ClientChangeVerifier); }; +class InputMethodBaseTest : public testing::Test { + protected: + InputMethodBaseTest() { + } + virtual ~InputMethodBaseTest() { + } + + virtual void SetUp() { + message_loop_.reset(new base::MessageLoopForUI); + } + + virtual void TearDown() { + message_loop_.reset(); + } + + private: + scoped_ptr<base::MessageLoop> message_loop_; + DISALLOW_COPY_AND_ASSIGN(InputMethodBaseTest); +}; + class MockInputMethodBase : public InputMethodBase { public: // Note: this class does not take the ownership of |verifier|. - MockInputMethodBase(ClientChangeVerifier* verifier) - : verifier_(verifier) { + MockInputMethodBase(ClientChangeVerifier* verifier) : verifier_(verifier) { } virtual ~MockInputMethodBase() { } @@ -159,6 +182,8 @@ class MockInputMethodBase : public InputMethodBase { } ClientChangeVerifier* verifier_; + + FRIEND_TEST_ALL_PREFIXES(InputMethodBaseTest, CandidateWindowEvents); DISALLOW_COPY_AND_ASSIGN(MockInputMethodBase); }; @@ -190,10 +215,38 @@ class MockInputMethodObserver : public InputMethodObserver { DISALLOW_COPY_AND_ASSIGN(MockInputMethodObserver); }; +class MockTextInputClient : public DummyTextInputClient { + public: + MockTextInputClient() + : shown_event_count_(0), updated_event_count_(0), hidden_event_count_(0) { + } + virtual ~MockTextInputClient() { + } + + virtual void OnCandidateWindowShown() OVERRIDE { + ++shown_event_count_; + } + virtual void OnCandidateWindowUpdated() OVERRIDE { + ++updated_event_count_; + } + virtual void OnCandidateWindowHidden() OVERRIDE { + ++hidden_event_count_; + } + + int shown_event_count() const { return shown_event_count_; } + int updated_event_count() const { return updated_event_count_; } + int hidden_event_count() const { return hidden_event_count_; } + + private: + int shown_event_count_; + int updated_event_count_; + int hidden_event_count_; +}; + typedef ScopedObserver<InputMethod, InputMethodObserver> InputMethodScopedObserver; -TEST(InputMethodBaseTest, SetFocusedTextInputClient) { +TEST_F(InputMethodBaseTest, SetFocusedTextInputClient) { DummyTextInputClient text_input_client_1st; DummyTextInputClient text_input_client_2nd; @@ -252,7 +305,7 @@ TEST(InputMethodBaseTest, SetFocusedTextInputClient) { } } -TEST(InputMethodBaseTest, DetachTextInputClient) { +TEST_F(InputMethodBaseTest, DetachTextInputClient) { DummyTextInputClient text_input_client; DummyTextInputClient text_input_client_the_other; @@ -295,5 +348,52 @@ TEST(InputMethodBaseTest, DetachTextInputClient) { } } +TEST_F(InputMethodBaseTest, CandidateWindowEvents) { + MockTextInputClient text_input_client; + + { + ClientChangeVerifier verifier; + MockInputMethodBase input_method_base(&verifier); + input_method_base.OnFocus(); + + verifier.ExpectClientChange(NULL, &text_input_client); + input_method_base.SetFocusedTextInputClient(&text_input_client); + + EXPECT_EQ(0, text_input_client.shown_event_count()); + EXPECT_EQ(0, text_input_client.updated_event_count()); + EXPECT_EQ(0, text_input_client.hidden_event_count()); + + input_method_base.OnCandidateWindowShown(); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(1, text_input_client.shown_event_count()); + EXPECT_EQ(0, text_input_client.updated_event_count()); + EXPECT_EQ(0, text_input_client.hidden_event_count()); + + input_method_base.OnCandidateWindowUpdated(); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(1, text_input_client.shown_event_count()); + EXPECT_EQ(1, text_input_client.updated_event_count()); + EXPECT_EQ(0, text_input_client.hidden_event_count()); + + input_method_base.OnCandidateWindowHidden(); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(1, text_input_client.shown_event_count()); + EXPECT_EQ(1, text_input_client.updated_event_count()); + EXPECT_EQ(1, text_input_client.hidden_event_count()); + + input_method_base.OnCandidateWindowShown(); + } + + // If InputMethod is deleted immediately after an event happens, but before + // its callback is invoked, the callback will be cancelled. + base::RunLoop().RunUntilIdle(); + EXPECT_EQ(1, text_input_client.shown_event_count()); + EXPECT_EQ(1, text_input_client.updated_event_count()); + EXPECT_EQ(1, text_input_client.hidden_event_count()); +} + } // namespace } // namespace ui diff --git a/ui/base/ime/input_method_factory.cc b/ui/base/ime/input_method_factory.cc index e44c8d99e9..616dd22bd2 100644 --- a/ui/base/ime/input_method_factory.cc +++ b/ui/base/ime/input_method_factory.cc @@ -4,7 +4,7 @@ #include "ui/base/ime/input_method_factory.h" -#include "ui/base/ime/input_method_delegate.h" +#include "base/memory/singleton.h" #include "ui/base/ime/mock_input_method.h" #if defined(OS_CHROMEOS) && defined(USE_X11) @@ -15,59 +15,99 @@ #include "ui/base/ime/input_method_tsf.h" #include "ui/base/ime/remote_input_method_win.h" #elif defined(USE_AURA) && defined(USE_X11) -#include "ui/base/ime/input_method_linux_x11.h" +#include "ui/base/ime/input_method_auralinux.h" #else -#include "ui/base/ime/fake_input_method.h" +#include "ui/base/ime/input_method_minimal.h" #endif -namespace ui { namespace { -bool g_input_method_set_for_testing = false; -InputMethod* g_shared_input_method = NULL; +ui::InputMethodFactory* g_input_method_factory = NULL; #if defined(OS_WIN) -// Returns a new instance of input method object for Windows. -scoped_ptr<InputMethod> CreateInputMethodWinInternal( +ui::InputMethod* g_shared_input_method = NULL; +#endif + +} // namespace + +namespace ui { + +// static +InputMethodFactory* InputMethodFactory::GetInstance() { + if (!g_input_method_factory) + SetInstance(DefaultInputMethodFactory::GetInstance()); + + return g_input_method_factory; +} + +// static +void InputMethodFactory::SetInstance(InputMethodFactory* instance) { + CHECK(!g_input_method_factory); + CHECK(instance); + + g_input_method_factory = instance; +} + +// static +void InputMethodFactory::ClearInstance() { + // It's a client's duty to delete the object. + g_input_method_factory = NULL; +} + +// DefaultInputMethodFactory + +// static +DefaultInputMethodFactory* DefaultInputMethodFactory::GetInstance() { + return Singleton<DefaultInputMethodFactory>::get(); +} + +scoped_ptr<InputMethod> DefaultInputMethodFactory::CreateInputMethod( internal::InputMethodDelegate* delegate, gfx::AcceleratedWidget widget) { +#if defined(OS_CHROMEOS) && defined(USE_X11) + return scoped_ptr<InputMethod>(new InputMethodIBus(delegate)); +#elif defined(OS_WIN) if (base::win::IsTSFAwareRequired()) return scoped_ptr<InputMethod>(new InputMethodTSF(delegate, widget)); if (IsRemoteInputMethodWinRequired(widget)) return CreateRemoteInputMethodWin(delegate); return scoped_ptr<InputMethod>(new InputMethodIMM32(delegate, widget)); -} +#elif defined(USE_AURA) && defined(USE_X11) + return scoped_ptr<InputMethod>(new InputMethodAuraLinux(delegate)); +#else + return scoped_ptr<InputMethod>(new InputMethodMinimal(delegate)); #endif +} -} // namespace +// MockInputMethodFactory + +// static +MockInputMethodFactory* MockInputMethodFactory::GetInstance() { + return Singleton<MockInputMethodFactory>::get(); +} + +scoped_ptr<InputMethod> MockInputMethodFactory::CreateInputMethod( + internal::InputMethodDelegate* delegate, + gfx::AcceleratedWidget /* widget */) { + return scoped_ptr<InputMethod>(new MockInputMethod(delegate)); +} + +// Shorthands scoped_ptr<InputMethod> CreateInputMethod( internal::InputMethodDelegate* delegate, gfx::AcceleratedWidget widget) { - if (g_input_method_set_for_testing) - return scoped_ptr<InputMethod>(new MockInputMethod(delegate)); -#if defined(OS_CHROMEOS) && defined(USE_X11) - return scoped_ptr<InputMethod>(new InputMethodIBus(delegate)); -#elif defined(OS_WIN) - return CreateInputMethodWinInternal(delegate, widget); -#elif defined(USE_AURA) && defined(USE_X11) - return scoped_ptr<InputMethod>(new InputMethodLinuxX11(delegate)); -#else - return scoped_ptr<InputMethod>(new FakeInputMethod(delegate)); -#endif + return InputMethodFactory::GetInstance()->CreateInputMethod(delegate, widget); } void SetUpInputMethodFactoryForTesting() { - g_input_method_set_for_testing = true; + InputMethodFactory::SetInstance(MockInputMethodFactory::GetInstance()); } -InputMethod* GetSharedInputMethod() { #if defined(OS_WIN) +InputMethod* GetSharedInputMethod() { if (!g_shared_input_method) g_shared_input_method = CreateInputMethod(NULL, NULL).release(); -#else - NOTREACHED(); -#endif return g_shared_input_method; } @@ -79,4 +119,6 @@ void DestroySharedInputMethod() { } } // namespace internal +#endif + } // namespace ui diff --git a/ui/base/ime/input_method_factory.h b/ui/base/ime/input_method_factory.h index 300c40b7a4..b738620552 100644 --- a/ui/base/ime/input_method_factory.h +++ b/ui/base/ime/input_method_factory.h @@ -5,10 +5,15 @@ #ifndef UI_BASE_IME_INPUT_METHOD_FACTORY_H_ #define UI_BASE_IME_INPUT_METHOD_FACTORY_H_ +#include "base/basictypes.h" +#include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" +#include "ui/base/ime/input_method_initializer.h" #include "ui/base/ui_export.h" #include "ui/gfx/native_widget_types.h" +template <typename T> struct DefaultSingletonTraits; + namespace ui { namespace internal { class InputMethodDelegate; @@ -16,14 +21,82 @@ class InputMethodDelegate; class InputMethod; -// Creates and returns an input method implementation for the platform. +class UI_EXPORT InputMethodFactory { + public: + // Returns the current active factory. + // If no factory was set, sets the DefaultInputMethodFactory by default. Once + // a factory was set, you cannot change the factory, and always the same + // factory is returned. + static InputMethodFactory* GetInstance(); + + // Sets an InputMethodFactory to be used. + // This function must be called at most once. |instance| is not owned by this + // class or marked automatically as a leaky object. It's a caller's duty to + // destroy the object or mark it as leaky. + static void SetInstance(InputMethodFactory* instance); + + virtual ~InputMethodFactory() {} + + // Creates and returns an input method implementation. + virtual scoped_ptr<InputMethod> CreateInputMethod( + internal::InputMethodDelegate* delegate, + gfx::AcceleratedWidget widget) = 0; + + private: + static void ClearInstance(); + + friend UI_EXPORT void ShutdownInputMethod(); + friend UI_EXPORT void ShutdownInputMethodForTesting(); +}; + +class DefaultInputMethodFactory : public InputMethodFactory { + public: + // For Singleton + static DefaultInputMethodFactory* GetInstance(); + + // Overridden from InputMethodFactory. + virtual scoped_ptr<InputMethod> CreateInputMethod( + internal::InputMethodDelegate* delegate, + gfx::AcceleratedWidget widget) OVERRIDE; + + private: + DefaultInputMethodFactory() {} + + friend struct DefaultSingletonTraits<DefaultInputMethodFactory>; + + DISALLOW_COPY_AND_ASSIGN(DefaultInputMethodFactory); +}; + +class MockInputMethodFactory : public InputMethodFactory { + public: + // For Singleton + static MockInputMethodFactory* GetInstance(); + + // Overridden from InputMethodFactory. + virtual scoped_ptr<InputMethod> CreateInputMethod( + internal::InputMethodDelegate* delegate, + gfx::AcceleratedWidget widget) OVERRIDE; + + private: + MockInputMethodFactory() {} + + friend struct DefaultSingletonTraits<MockInputMethodFactory>; + + DISALLOW_COPY_AND_ASSIGN(MockInputMethodFactory); +}; + +// Shorthand for +// InputMethodFactory::GetInstance()->CreateInputMethod(delegate, widget). UI_EXPORT scoped_ptr<InputMethod> CreateInputMethod( internal::InputMethodDelegate* delegate, gfx::AcceleratedWidget widget); -// With calling this function, CreateInputMethod will return MockInputMethod. +// Shorthand for InputMethodFactory::SetInstance(new MockInputMethodFactory()). +// TODO(yukishiino): Retires this shorthand, and makes ui::InitializeInputMethod +// and ui::InitializeInputMethodForTesting set the appropriate factory. UI_EXPORT void SetUpInputMethodFactoryForTesting(); +#if defined(OS_WIN) // Returns a shared input method object for the platform. Caller must not // delete the object. Currently supported only on Windows. This method is // for non-Aura environment, where only one input method object is created for @@ -35,6 +108,7 @@ namespace internal { // This function must be called only from input_method_initializer.cc. void DestroySharedInputMethod(); } // namespace internal +#endif } // namespace ui; diff --git a/ui/base/ime/input_method_ibus.cc b/ui/base/ime/input_method_ibus.cc index ac503a9b72..85bb244fca 100644 --- a/ui/base/ime/input_method_ibus.cc +++ b/ui/base/ime/input_method_ibus.cc @@ -4,12 +4,6 @@ #include "ui/base/ime/input_method_ibus.h" -#include <X11/X.h> -#include <X11/Xlib.h> -#include <X11/Xutil.h> -#undef FocusIn -#undef FocusOut - #include <algorithm> #include <cstring> #include <set> @@ -35,35 +29,9 @@ #include "ui/gfx/rect.h" namespace { - -const int kIBusReleaseMask = 1 << 30; - -XKeyEvent* GetKeyEvent(XEvent* event) { - DCHECK(event && (event->type == KeyPress || event->type == KeyRelease)); - return &event->xkey; -} - -// Converts X (and ibus) state to event flags. -int EventFlagsFromXState(unsigned int state) { - return (state & LockMask ? ui::EF_CAPS_LOCK_DOWN : 0) | - (state & ControlMask ? ui::EF_CONTROL_DOWN : 0) | - (state & ShiftMask ? ui::EF_SHIFT_DOWN : 0) | - (state & Mod1Mask ? ui::EF_ALT_DOWN : 0) | - (state & Button1Mask ? ui::EF_LEFT_MOUSE_BUTTON : 0) | - (state & Button2Mask ? ui::EF_MIDDLE_MOUSE_BUTTON : 0) | - (state & Button3Mask ? ui::EF_RIGHT_MOUSE_BUTTON : 0); -} - -// Converts X state to ibus key and button state. -uint32 IBusStateFromXState(unsigned int state) { - return (state & (LockMask | ControlMask | ShiftMask | Mod1Mask | - Button1Mask | Button2Mask | Button3Mask)); -} - chromeos::IBusEngineHandlerInterface* GetEngine() { return chromeos::IBusBridge::Get()->GetEngineHandler(); } - } // namespace namespace ui { @@ -112,24 +80,13 @@ bool InputMethodIBus::OnUntranslatedIMEMessage(const base::NativeEvent& event, } void InputMethodIBus::ProcessKeyEventDone(uint32 id, - ui::KeyEvent* key_event, - uint32 ibus_keyval, - uint32 ibus_keycode, - uint32 ibus_state, + ui::KeyEvent* event, bool is_handled) { - DCHECK(key_event); - - // TODO(komatsu): Support fabricated key events. - if (!key_event->HasNativeEvent()) - return; - - const base::NativeEvent event = key_event->native_event(); - std::set<uint32>::iterator it = pending_key_events_.find(id); - - if (it == pending_key_events_.end()) + if (pending_key_events_.find(id) == pending_key_events_.end()) return; // Abandoned key event. - if (event->type == KeyPress) { + DCHECK(event); + if (event->type() == ET_KEY_PRESSED) { if (is_handled) { // IME event has a priority to be handled, so that character composer // should be reset. @@ -137,35 +94,21 @@ void InputMethodIBus::ProcessKeyEventDone(uint32 id, } else { // If IME does not handle key event, passes keyevent to character composer // to be able to compose complex characters. - is_handled = ExecuteCharacterComposer(ibus_keyval, ibus_keycode, - ibus_state); + is_handled = ExecuteCharacterComposer(*event); } } - if (event->type == KeyPress || event->type == KeyRelease) - ProcessKeyEventPostIME(*key_event, ibus_state, is_handled); + if (event->type() == ET_KEY_PRESSED || event->type() == ET_KEY_RELEASED) + ProcessKeyEventPostIME(*event, is_handled); - // Do not use |it| for erasing, ProcessKeyEventPostIME may change the - // |pending_key_events_|. + // ProcessKeyEventPostIME may change the |pending_key_events_|. pending_key_events_.erase(id); } bool InputMethodIBus::DispatchKeyEvent(const ui::KeyEvent& event) { - if (!event.HasNativeEvent()) - return DispatchFabricatedKeyEvent(event); - - const base::NativeEvent& native_event = event.native_event(); - DCHECK(native_event && (native_event->type == KeyPress || - native_event->type == KeyRelease)); + DCHECK(event.type() == ET_KEY_PRESSED || event.type() == ET_KEY_RELEASED); DCHECK(system_toplevel_window_focused()); - uint32 ibus_keyval = 0; - uint32 ibus_keycode = 0; - uint32 ibus_state = 0; - IBusKeyEventFromNativeKeyEvent( - native_event, - &ibus_keyval, &ibus_keycode, &ibus_state); - // If |context_| is not usable, then we can only dispatch the key event as is. // We also dispatch the key event directly if the current text input type is // TEXT_INPUT_TYPE_PASSWORD, to bypass the input method. @@ -173,35 +116,30 @@ bool InputMethodIBus::DispatchKeyEvent(const ui::KeyEvent& event) { // enabled, so that ibus can have a chance to enable the |context_|. if (!context_focused_ || !GetEngine() || GetTextInputType() == TEXT_INPUT_TYPE_PASSWORD ) { - if (native_event->type == KeyPress) { - if (ExecuteCharacterComposer(ibus_keyval, ibus_keycode, ibus_state)) { + if (event.type() == ET_KEY_PRESSED) { + if (ExecuteCharacterComposer(event)) { // Treating as PostIME event if character composer handles key event and // generates some IME event, - ProcessKeyEventPostIME(event, ibus_state, true); + ProcessKeyEventPostIME(event, true); return true; } - ProcessUnfilteredKeyPressEvent(native_event, ibus_state); + ProcessUnfilteredKeyPressEvent(event); } else { - DispatchKeyEventPostIME(native_event); + DispatchKeyEventPostIME(event); } return true; } pending_key_events_.insert(current_keyevent_id_); - ui::KeyEvent* copied_event = event.Copy(); + ui::KeyEvent* copied_event = new ui::KeyEvent(event); GetEngine()->ProcessKeyEvent( - ibus_keyval, - ibus_keycode, - ibus_state, + event, base::Bind(&InputMethodIBus::ProcessKeyEventDone, weak_ptr_factory_.GetWeakPtr(), current_keyevent_id_, // Pass the ownership of |copied_event|. - base::Owned(copied_event), - ibus_keyval, - ibus_keycode, - ibus_state)); + base::Owned(copied_event))); ++current_keyevent_id_; @@ -331,20 +269,6 @@ void InputMethodIBus::ConfirmCompositionText() { ResetContext(); } -bool InputMethodIBus::DispatchFabricatedKeyEvent(const ui::KeyEvent& event) { - // TODO(bryeung): The fabricated events should also pass through IME. - if (event.type() == ET_KEY_PRESSED) { - ProcessUnfilteredFabricatedKeyPressEvent( - ET_KEY_PRESSED, event.key_code(), event.flags()); - } else { - DispatchFabricatedKeyEventPostIME( - ET_KEY_RELEASED, - event.key_code(), - event.flags()); - } - return true; -} - void InputMethodIBus::ResetContext() { if (!context_focused_ || !GetTextInputClient()) return; @@ -423,24 +347,17 @@ void InputMethodIBus::UpdateContextFocusState() { void InputMethodIBus::ProcessKeyEventPostIME( const ui::KeyEvent& event, - uint32 ibus_state, bool handled) { - // TODO(komatsu): Support fabricated key events. - if (!event.HasNativeEvent()) - return; - const base::NativeEvent& native_event = event.native_event(); - TextInputClient* client = GetTextInputClient(); - if (!client) { // As ibus works asynchronously, there is a chance that the focused client // loses focus before this method gets called. - DispatchKeyEventPostIME(native_event); + DispatchKeyEventPostIME(event); return; } - if (native_event->type == KeyPress && handled) - ProcessFilteredKeyPressEvent(native_event); + if (event.type() == ET_KEY_PRESSED && handled) + ProcessFilteredKeyPressEvent(event); // In case the focus was changed by the key event. The |context_| should have // been reset when the focused window changed. @@ -448,58 +365,35 @@ void InputMethodIBus::ProcessKeyEventPostIME( return; if (HasInputMethodResult()) - ProcessInputMethodResult(native_event, handled); + ProcessInputMethodResult(event, handled); // In case the focus was changed when sending input method results to the // focused window. if (client != GetTextInputClient()) return; - if (native_event->type == KeyPress && !handled) - ProcessUnfilteredKeyPressEvent(native_event, ibus_state); - else if (native_event->type == KeyRelease) - DispatchKeyEventPostIME(native_event); -} - -void InputMethodIBus::IBusKeyEventFromNativeKeyEvent( - const base::NativeEvent& native_event, - uint32* ibus_keyval, - uint32* ibus_keycode, - uint32* ibus_state) { - DCHECK(native_event); // A fabricated event is not supported here. - XKeyEvent* x_key = GetKeyEvent(native_event); - - // Yes, ibus uses X11 keysym. We cannot use XLookupKeysym(), which doesn't - // translate Shift and CapsLock states. - KeySym keysym = NoSymbol; - ::XLookupString(x_key, NULL, 0, &keysym, NULL); - *ibus_keyval = keysym; - *ibus_keycode = x_key->keycode; - *ibus_state = IBusStateFromXState(x_key->state); - if (native_event->type == KeyRelease) - *ibus_state |= kIBusReleaseMask; -} - -void InputMethodIBus::ProcessFilteredKeyPressEvent( - const base::NativeEvent& native_event) { - if (NeedInsertChar()) - DispatchKeyEventPostIME(native_event); - else - DispatchFabricatedKeyEventPostIME( - ET_KEY_PRESSED, - VKEY_PROCESSKEY, - EventFlagsFromXState(GetKeyEvent(native_event)->state)); + if (event.type() == ET_KEY_PRESSED && !handled) + ProcessUnfilteredKeyPressEvent(event); + else if (event.type() == ET_KEY_RELEASED) + DispatchKeyEventPostIME(event); } -void InputMethodIBus::ProcessUnfilteredKeyPressEvent( - const base::NativeEvent& native_event, - uint32 ibus_state) { - // For a fabricated event, ProcessUnfilteredFabricatedKeyPressEvent should be - // called instead. - DCHECK(native_event); +void InputMethodIBus::ProcessFilteredKeyPressEvent(const ui::KeyEvent& event) { + if (NeedInsertChar()) { + DispatchKeyEventPostIME(event); + } else { + const ui::KeyEvent fabricated_event(ET_KEY_PRESSED, + VKEY_PROCESSKEY, + event.flags(), + false); // is_char + DispatchKeyEventPostIME(fabricated_event); + } +} - TextInputClient* client = GetTextInputClient(); - DispatchKeyEventPostIME(native_event); +void InputMethodIBus::ProcessUnfilteredKeyPressEvent( + const ui::KeyEvent& event) { + const TextInputClient* prev_client = GetTextInputClient(); + DispatchKeyEventPostIME(event); // We shouldn't dispatch the character anymore if the key event dispatch // caused focus change. For example, in the following scenario, @@ -508,57 +402,42 @@ void InputMethodIBus::ProcessUnfilteredKeyPressEvent( // 3. enable Korean IME, press A, then press Tab to move the focus to the web // page. // We should return here not to send the Tab key event to RWHV. - if (client != GetTextInputClient()) + TextInputClient* client = GetTextInputClient(); + if (!client || client != prev_client) return; - const uint32 event_flags = EventFlagsFromXState(ibus_state); - // If a key event was not filtered by |context_| and |character_composer_|, // then it means the key event didn't generate any result text. So we need // to send corresponding character to the focused text input client. - client = GetTextInputClient(); - + const uint32 event_flags = event.flags(); uint16 ch = 0; - if (!(event_flags & ui::EF_CONTROL_DOWN)) - ch = ui::GetCharacterFromXEvent(native_event); - if (!ch) { - ch = ui::GetCharacterFromKeyCode( - ui::KeyboardCodeFromNative(native_event), event_flags); + if (event.HasNativeEvent()) { + const base::NativeEvent& native_event = event.native_event(); + + if (!(event_flags & ui::EF_CONTROL_DOWN)) + ch = ui::GetCharacterFromXEvent(native_event); + if (!ch) { + ch = ui::GetCharacterFromKeyCode( + ui::KeyboardCodeFromNative(native_event), event_flags); + } + } else { + ch = ui::GetCharacterFromKeyCode(event.key_code(), event_flags); } - if (client && ch) - client->InsertChar(ch, event_flags); -} - -void InputMethodIBus::ProcessUnfilteredFabricatedKeyPressEvent( - EventType type, - KeyboardCode key_code, - int event_flags) { - TextInputClient* client = GetTextInputClient(); - DispatchFabricatedKeyEventPostIME(type, key_code, event_flags); - - if (client != GetTextInputClient()) - return; - - client = GetTextInputClient(); - const uint16 ch = ui::GetCharacterFromKeyCode(key_code, event_flags); - if (client && ch) + if (ch) client->InsertChar(ch, event_flags); } -void InputMethodIBus::ProcessInputMethodResult( - const base::NativeEvent& native_event, - bool handled) { +void InputMethodIBus::ProcessInputMethodResult(const ui::KeyEvent& event, + bool handled) { TextInputClient* client = GetTextInputClient(); DCHECK(client); if (result_text_.length()) { if (handled && NeedInsertChar()) { - const uint32 state = - EventFlagsFromXState(GetKeyEvent(native_event)->state); for (string16::const_iterator i = result_text_.begin(); i != result_text_.end(); ++i) { - client->InsertChar(*i, state); + client->InsertChar(*i, event.flags()); } } else { client->InsertText(result_text_); @@ -688,13 +567,8 @@ void InputMethodIBus::DeleteSurroundingText(int32 offset, uint32 length) { GetTextInputClient()->ExtendSelectionAndDelete(length, 0U); } -bool InputMethodIBus::ExecuteCharacterComposer(uint32 ibus_keyval, - uint32 ibus_keycode, - uint32 ibus_state) { - bool consumed = character_composer_.FilterKeyPress( - ibus_keyval, - ibus_keycode, - EventFlagsFromXState(ibus_state)); +bool InputMethodIBus::ExecuteCharacterComposer(const ui::KeyEvent& event) { + bool consumed = character_composer_.FilterKeyPress(event); suppress_next_result_ = false; chromeos::IBusText preedit; @@ -741,9 +615,6 @@ void InputMethodIBus::ExtractCompositionText( const std::vector<chromeos::IBusText::UnderlineAttribute>& underline_attributes = text.underline_attributes(); - const std::vector<chromeos::IBusText::SelectionAttribute>& - selection_attributes = text.selection_attributes(); - if (!underline_attributes.empty()) { for (size_t i = 0; i < underline_attributes.size(); ++i) { const uint32 start = underline_attributes[i].start_index; @@ -763,28 +634,24 @@ void InputMethodIBus::ExtractCompositionText( } } - if (!selection_attributes.empty()) { - LOG_IF(ERROR, selection_attributes.size() != 1) - << "Chrome does not support multiple selection"; - for (uint32 i = 0; i < selection_attributes.size(); ++i) { - const uint32 start = selection_attributes[i].start_index; - const uint32 end = selection_attributes[i].end_index; - if (start >= end) - continue; - CompositionUnderline underline( - char16_offsets[start], char16_offsets[end], - SK_ColorBLACK, true /* thick */); - out_composition->underlines.push_back(underline); - // If the cursor is at start or end of this underline, then we treat - // it as the selection range as well, but make sure to set the cursor - // position to the selection end. - if (underline.start_offset == cursor_offset) { - out_composition->selection.set_start(underline.end_offset); - out_composition->selection.set_end(cursor_offset); - } else if (underline.end_offset == cursor_offset) { - out_composition->selection.set_start(underline.start_offset); - out_composition->selection.set_end(cursor_offset); - } + DCHECK(text.selection_start() <= text.selection_end()); + if (text.selection_start() < text.selection_end()) { + const uint32 start = text.selection_start(); + const uint32 end = text.selection_end(); + CompositionUnderline underline( + char16_offsets[start], char16_offsets[end], + SK_ColorBLACK, true /* thick */); + out_composition->underlines.push_back(underline); + + // If the cursor is at start or end of this underline, then we treat + // it as the selection range as well, but make sure to set the cursor + // position to the selection end. + if (underline.start_offset == cursor_offset) { + out_composition->selection.set_start(underline.end_offset); + out_composition->selection.set_end(cursor_offset); + } else if (underline.end_offset == cursor_offset) { + out_composition->selection.set_start(underline.start_offset); + out_composition->selection.set_end(cursor_offset); } } diff --git a/ui/base/ime/input_method_ibus.h b/ui/base/ime/input_method_ibus.h index 47d09396c1..01f958db16 100644 --- a/ui/base/ime/input_method_ibus.h +++ b/ui/base/ime/input_method_ibus.h @@ -12,7 +12,7 @@ #include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" #include "base/memory/weak_ptr.h" -#include "ui/base/ime/character_composer.h" +#include "ui/base/ime/chromeos/character_composer.h" #include "ui/base/ime/chromeos/ibus_bridge.h" #include "ui/base/ime/composition_text.h" #include "ui/base/ime/input_method_base.h" @@ -59,16 +59,8 @@ class UI_EXPORT InputMethodIBus // Process a key returned from the input method. virtual void ProcessKeyEventPostIME(const ui::KeyEvent& event, - uint32 ibus_state, bool handled); - // Converts |native_event| to ibus representation. - virtual void IBusKeyEventFromNativeKeyEvent( - const base::NativeEvent& native_event, - uint32* ibus_keyval, - uint32* ibus_keycode, - uint32* ibus_state); - // Resets context and abandon all pending results and key events. void ResetContext(); @@ -84,28 +76,20 @@ class UI_EXPORT InputMethodIBus // Asks the client to confirm current composition text. void ConfirmCompositionText(); - // Dispatchs a key event which does not contain a native event. - bool DispatchFabricatedKeyEvent(const ui::KeyEvent& event); - // Checks the availability of focused text input client and update focus // state. void UpdateContextFocusState(); // Processes a key event that was already filtered by the input method. // A VKEY_PROCESSKEY may be dispatched to the focused View. - void ProcessFilteredKeyPressEvent(const base::NativeEvent& native_key_event); + void ProcessFilteredKeyPressEvent(const ui::KeyEvent& event); // Processes a key event that was not filtered by the input method. - void ProcessUnfilteredKeyPressEvent(const base::NativeEvent& native_key_event, - uint32 ibus_state); - void ProcessUnfilteredFabricatedKeyPressEvent(EventType type, - KeyboardCode key_code, - int event_flags); + void ProcessUnfilteredKeyPressEvent(const ui::KeyEvent& event); // Sends input method result caused by the given key event to the focused text // input client. - void ProcessInputMethodResult(const base::NativeEvent& native_key_event, - bool filtered); + void ProcessInputMethodResult(const ui::KeyEvent& event, bool filtered); // Checks if the pending input method result needs inserting into the focused // text input client as a single character. @@ -120,9 +104,7 @@ class UI_EXPORT InputMethodIBus // Passes keyevent and executes character composition if necessary. Returns // true if character composer comsumes key event. - bool ExecuteCharacterComposer(uint32 ibus_keyval, - uint32 ibus_keycode, - uint32 ibus_state); + bool ExecuteCharacterComposer(const ui::KeyEvent& event); // chromeos::IBusInputContextHandlerInterface overrides: virtual void CommitText(const std::string& text) OVERRIDE; @@ -135,9 +117,7 @@ class UI_EXPORT InputMethodIBus void HidePreeditText(); // Callback function for IBusEngineHandlerInterface::ProcessKeyEvent. - void ProcessKeyEventDone(uint32 id, ui::KeyEvent* key_event, - uint32 ibus_keyval, uint32 ibus_keycode, - uint32 ibus_state, bool is_handled); + void ProcessKeyEventDone(uint32 id, ui::KeyEvent* event, bool is_handled); // All pending key events. Note: we do not own these object, we just save // pointers to these object so that we can abandon them when necessary. diff --git a/ui/base/ime/input_method_ibus_unittest.cc b/ui/base/ime/input_method_ibus_unittest.cc index 44c05949ef..f4b068db14 100644 --- a/ui/base/ime/input_method_ibus_unittest.cc +++ b/ui/base/ime/input_method_ibus_unittest.cc @@ -70,16 +70,8 @@ class TestableInputMethodIBus : public InputMethodIBus { bool handled; }; - struct IBusKeyEventFromNativeKeyEventResult { - IBusKeyEventFromNativeKeyEventResult() : keyval(0), keycode(0), state(0) {} - uint32 keyval; - uint32 keycode; - uint32 state; - }; - // InputMethodIBus override. virtual void ProcessKeyEventPostIME(const ui::KeyEvent& key_event, - uint32 ibus_state, bool handled) OVERRIDE { process_key_event_post_ime_args_.event = &key_event; process_key_event_post_ime_args_.handled = handled; @@ -722,10 +714,8 @@ TEST_F(InputMethodIBusTest, ExtractCompositionTextTest_Selection) { // Set up ibus text with one underline attribute. chromeos::IBusText ibus_text; ibus_text.set_text(kSampleText); - chromeos::IBusText::SelectionAttribute selection; - selection.start_index = 1UL; - selection.end_index = 4UL; - ibus_text.mutable_selection_attributes()->push_back(selection); + ibus_text.set_selection_start(1UL); + ibus_text.set_selection_end(4UL); CompositionText composition_text; ime_->ExtractCompositionText(ibus_text, kCursorPos, &composition_text); @@ -733,9 +723,9 @@ TEST_F(InputMethodIBusTest, ExtractCompositionTextTest_Selection) { EXPECT_EQ(kCursorPos, composition_text.selection.start()); EXPECT_EQ(kCursorPos, composition_text.selection.end()); ASSERT_EQ(1UL, composition_text.underlines.size()); - EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.start_index), + EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_start()), composition_text.underlines[0].start_offset); - EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.end_index), + EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_end()), composition_text.underlines[0].end_offset); EXPECT_EQ(SK_ColorBLACK, composition_text.underlines[0].color); EXPECT_TRUE(composition_text.underlines[0].thick); @@ -750,24 +740,22 @@ TEST_F(InputMethodIBusTest, // Set up ibus text with one underline attribute. chromeos::IBusText ibus_text; ibus_text.set_text(kSampleText); - chromeos::IBusText::SelectionAttribute selection; - selection.start_index = kCursorPos; - selection.end_index = 4UL; - ibus_text.mutable_selection_attributes()->push_back(selection); + ibus_text.set_selection_start(kCursorPos); + ibus_text.set_selection_end(4UL); CompositionText composition_text; ime_->ExtractCompositionText(ibus_text, kCursorPos, &composition_text); EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text); // If the cursor position is same as selection bounds, selection start // position become opposit side of selection from cursor. - EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.end_index), + EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_end()), composition_text.selection.start()); EXPECT_EQ(GetOffsetInUTF16(kSampleText, kCursorPos), composition_text.selection.end()); ASSERT_EQ(1UL, composition_text.underlines.size()); - EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.start_index), + EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_start()), composition_text.underlines[0].start_offset); - EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.end_index), + EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_end()), composition_text.underlines[0].end_offset); EXPECT_EQ(SK_ColorBLACK, composition_text.underlines[0].color); EXPECT_TRUE(composition_text.underlines[0].thick); @@ -781,24 +769,22 @@ TEST_F(InputMethodIBusTest, ExtractCompositionTextTest_SelectionEndWithCursor) { // Set up ibus text with one underline attribute. chromeos::IBusText ibus_text; ibus_text.set_text(kSampleText); - chromeos::IBusText::SelectionAttribute selection; - selection.start_index = 1UL; - selection.end_index = kCursorPos; - ibus_text.mutable_selection_attributes()->push_back(selection); + ibus_text.set_selection_start(1UL); + ibus_text.set_selection_end(kCursorPos); CompositionText composition_text; ime_->ExtractCompositionText(ibus_text, kCursorPos, &composition_text); EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text); // If the cursor position is same as selection bounds, selection start // position become opposit side of selection from cursor. - EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.start_index), + EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_start()), composition_text.selection.start()); EXPECT_EQ(GetOffsetInUTF16(kSampleText, kCursorPos), composition_text.selection.end()); ASSERT_EQ(1UL, composition_text.underlines.size()); - EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.start_index), + EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_start()), composition_text.underlines[0].start_offset); - EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.end_index), + EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_end()), composition_text.underlines[0].end_offset); EXPECT_EQ(SK_ColorBLACK, composition_text.underlines[0].color); EXPECT_TRUE(composition_text.underlines[0].thick); @@ -924,10 +910,9 @@ class InputMethodIBusKeyEventTest : public InputMethodIBusTest { }; TEST_F(InputMethodIBusKeyEventTest, KeyEventDelayResponseTest) { - const int kXFlags = ShiftMask; - const unsigned int kIbusFlags = ui::EF_SHIFT_DOWN; + const int kFlags = ui::EF_SHIFT_DOWN; ScopedXI2Event xevent; - xevent.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_A, kXFlags); + xevent.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_A, kFlags); const ui::KeyEvent event(xevent, true); // Do key event. @@ -936,14 +921,12 @@ TEST_F(InputMethodIBusKeyEventTest, KeyEventDelayResponseTest) { ime_->DispatchKeyEvent(event); // Check before state. + const ui::KeyEvent* key_event = + mock_ime_engine_handler_->last_processed_key_event(); EXPECT_EQ(1, mock_ime_engine_handler_->process_key_event_call_count()); - EXPECT_EQ("A", - chromeos::input_method::GetIBusKey( - mock_ime_engine_handler_->last_processed_keysym())); - EXPECT_EQ("KeyA", - chromeos::input_method::GetIBusKeyCode( - mock_ime_engine_handler_->last_processed_keycode())); - EXPECT_EQ(kIbusFlags, mock_ime_engine_handler_->last_processed_state()); + EXPECT_EQ(ui::VKEY_A, key_event->key_code()); + EXPECT_EQ("KeyA", key_event->code()); + EXPECT_EQ(kFlags, key_event->flags()); EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count()); // Do callback. @@ -963,38 +946,33 @@ TEST_F(InputMethodIBusKeyEventTest, MultiKeyEventDelayResponseTest) { input_type_ = TEXT_INPUT_TYPE_TEXT; ime_->OnTextInputTypeChanged(this); - const int kXFlags = ShiftMask; - const unsigned int kIbusFlags = ui::EF_SHIFT_DOWN; + const int kFlags = ui::EF_SHIFT_DOWN; ScopedXI2Event xevent; - xevent.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_B, kXFlags); + xevent.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_B, kFlags); const ui::KeyEvent event(xevent, true); // Do key event. ime_->DispatchKeyEvent(event); - EXPECT_EQ("B", - chromeos::input_method::GetIBusKey( - mock_ime_engine_handler_->last_processed_keysym())); - EXPECT_EQ("KeyB", - chromeos::input_method::GetIBusKeyCode( - mock_ime_engine_handler_->last_processed_keycode())); - EXPECT_EQ(kIbusFlags, mock_ime_engine_handler_->last_processed_state()); + const ui::KeyEvent* key_event = + mock_ime_engine_handler_->last_processed_key_event(); + EXPECT_EQ(ui::VKEY_B, key_event->key_code()); + EXPECT_EQ("KeyB", key_event->code()); + EXPECT_EQ(kFlags, key_event->flags()); KeyEventCallback first_callback = mock_ime_engine_handler_->last_passed_callback(); // Do key event again. ScopedXI2Event xevent2; - xevent2.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_C, kXFlags); + xevent2.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_C, kFlags); const ui::KeyEvent event2(xevent2, true); ime_->DispatchKeyEvent(event2); - EXPECT_EQ("C", - chromeos::input_method::GetIBusKey( - mock_ime_engine_handler_->last_processed_keysym())); - EXPECT_EQ("KeyC", - chromeos::input_method::GetIBusKeyCode( - mock_ime_engine_handler_->last_processed_keycode())); - EXPECT_EQ(kIbusFlags, mock_ime_engine_handler_->last_processed_state()); + const ui::KeyEvent* key_event2 = + mock_ime_engine_handler_->last_processed_key_event(); + EXPECT_EQ(ui::VKEY_C, key_event2->key_code()); + EXPECT_EQ("KeyC", key_event2->code()); + EXPECT_EQ(kFlags, key_event2->flags()); // Check before state. EXPECT_EQ(2, @@ -1024,9 +1002,8 @@ TEST_F(InputMethodIBusKeyEventTest, MultiKeyEventDelayResponseTest) { } TEST_F(InputMethodIBusKeyEventTest, KeyEventDelayResponseResetTest) { - const int kXFlags = ShiftMask; ScopedXI2Event xevent; - xevent.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_A, kXFlags); + xevent.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_SHIFT_DOWN); const ui::KeyEvent event(xevent, true); // Do key event. diff --git a/ui/base/ime/input_method_imm32.cc b/ui/base/ime/input_method_imm32.cc index 8ee5c5c0e9..16a33a1128 100644 --- a/ui/base/ime/input_method_imm32.cc +++ b/ui/base/ime/input_method_imm32.cc @@ -235,13 +235,25 @@ LRESULT InputMethodIMM32::OnImeNotify(UINT message, BOOL* handled) { *handled = FALSE; + bool previous_state = is_candidate_popup_open_; + // Update |is_candidate_popup_open_|, whether a candidate window is open. switch (wparam) { case IMN_OPENCANDIDATE: is_candidate_popup_open_ = true; + if (!previous_state) + OnCandidateWindowShown(); break; case IMN_CLOSECANDIDATE: is_candidate_popup_open_ = false; + if (previous_state) + OnCandidateWindowHidden(); + break; + case IMN_CHANGECANDIDATE: + // TODO(kochi): The IME API expects this event to notify window size change, + // while this may fire more often without window resize. There is no generic + // way to get bounds of candidate window. + OnCandidateWindowUpdated(); break; } diff --git a/ui/base/ime/input_method_initializer.cc b/ui/base/ime/input_method_initializer.cc index 5731a25005..ad29e61f50 100644 --- a/ui/base/ime/input_method_initializer.cc +++ b/ui/base/ime/input_method_initializer.cc @@ -4,15 +4,16 @@ #include "ui/base/ime/input_method_initializer.h" +#if defined(TOOLKIT_VIEWS) || defined(USE_AURA) #include "ui/base/ime/input_method_factory.h" +#endif #if defined(OS_CHROMEOS) #include "base/logging.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "ui/base/ime/chromeos/ibus_bridge.h" #elif defined(USE_AURA) && defined(USE_X11) -#include "base/memory/scoped_ptr.h" -#include "ui/base/ime/input_method_linux_x11.h" +#include "ui/base/ime/input_method_auralinux.h" #include "ui/base/ime/linux/fake_input_method_context_factory.h" #elif defined(OS_WIN) #include "base/win/metro.h" @@ -35,7 +36,7 @@ void InitializeInputMethod() { #if defined(OS_CHROMEOS) chromeos::IBusBridge::Initialize(); #elif defined(USE_AURA) && defined(USE_X11) - InputMethodLinuxX11::Initialize(); + InputMethodAuraLinux::Initialize(); #elif defined(OS_WIN) if (base::win::IsTSFAwareRequired()) TSFBridge::Initialize(); @@ -43,6 +44,9 @@ void InitializeInputMethod() { } void ShutdownInputMethod() { +#if defined(TOOLKIT_VIEWS) || defined(USE_AURA) + InputMethodFactory::ClearInstance(); +#endif #if defined(OS_CHROMEOS) chromeos::IBusBridge::Shutdown(); #elif defined(OS_WIN) @@ -80,6 +84,9 @@ void InitializeInputMethodForTesting() { } void ShutdownInputMethodForTesting() { +#if defined(TOOLKIT_VIEWS) || defined(USE_AURA) + InputMethodFactory::ClearInstance(); +#endif #if defined(OS_CHROMEOS) chromeos::IBusBridge::Shutdown(); // TODO(nona): Remove DBusThreadManager finalize. diff --git a/ui/base/ime/input_method_minimal.cc b/ui/base/ime/input_method_minimal.cc new file mode 100644 index 0000000000..0b51b9e3ce --- /dev/null +++ b/ui/base/ime/input_method_minimal.cc @@ -0,0 +1,67 @@ +// Copyright 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. + +#include "ui/base/ime/input_method_minimal.h" + +#include "ui/base/ime/text_input_client.h" +#include "ui/events/event.h" +#include "ui/events/event_constants.h" + +namespace ui { + +InputMethodMinimal::InputMethodMinimal( + internal::InputMethodDelegate* delegate) { + SetDelegate(delegate); +} + +InputMethodMinimal::~InputMethodMinimal() {} + +bool InputMethodMinimal::OnUntranslatedIMEMessage( + const base::NativeEvent& event, + NativeEventResult* result) { + return false; +} + +bool InputMethodMinimal::DispatchKeyEvent(const ui::KeyEvent& event) { + DCHECK(event.type() == ET_KEY_PRESSED || event.type() == ET_KEY_RELEASED); + + // If no text input client, do nothing. + if (!GetTextInputClient()) + return DispatchKeyEventPostIME(event); + + // Insert the character. + const bool handled = DispatchKeyEventPostIME(event); + if (event.type() == ET_KEY_PRESSED && GetTextInputClient()) { + const uint16 ch = event.GetCharacter(); + if (ch) { + GetTextInputClient()->InsertChar(ch, event.flags()); + return true; + } + } + return handled; +} + +void InputMethodMinimal::OnCaretBoundsChanged(const TextInputClient* client) {} + +void InputMethodMinimal::CancelComposition(const TextInputClient* client) {} + +void InputMethodMinimal::OnInputLocaleChanged() {} + +std::string InputMethodMinimal::GetInputLocale() { + return std::string(); +} + +base::i18n::TextDirection InputMethodMinimal::GetInputTextDirection() { + return base::i18n::UNKNOWN_DIRECTION; +} + +bool InputMethodMinimal::IsActive() { + return true; +} + +bool InputMethodMinimal::IsCandidatePopupOpen() const { + return false; +} + +} // namespace ui diff --git a/ui/base/ime/input_method_minimal.h b/ui/base/ime/input_method_minimal.h new file mode 100644 index 0000000000..2ba158f181 --- /dev/null +++ b/ui/base/ime/input_method_minimal.h @@ -0,0 +1,37 @@ +// Copyright 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. + +#ifndef UI_BASE_IME_INPUT_METHOD_MINIMAL_H_ +#define UI_BASE_IME_INPUT_METHOD_MINIMAL_H_ + +#include "ui/base/ime/input_method_base.h" + +namespace ui { + +// A minimal implementation of ui::InputMethod, which supports only the direct +// input without any compositions or conversions. +class UI_EXPORT InputMethodMinimal : public InputMethodBase { + public: + explicit InputMethodMinimal(internal::InputMethodDelegate* delegate); + virtual ~InputMethodMinimal(); + + // Overriden from InputMethod. + virtual bool OnUntranslatedIMEMessage(const base::NativeEvent& event, + NativeEventResult* result) OVERRIDE; + virtual bool DispatchKeyEvent(const ui::KeyEvent& event) OVERRIDE; + virtual void OnCaretBoundsChanged(const TextInputClient* client) OVERRIDE; + virtual void CancelComposition(const TextInputClient* client) OVERRIDE; + virtual void OnInputLocaleChanged() OVERRIDE; + virtual std::string GetInputLocale() OVERRIDE; + virtual base::i18n::TextDirection GetInputTextDirection() OVERRIDE; + virtual bool IsActive() OVERRIDE; + virtual bool IsCandidatePopupOpen() const OVERRIDE; + + private: + DISALLOW_COPY_AND_ASSIGN(InputMethodMinimal); +}; + +} // namespace ui + +#endif // UI_BASE_IME_INPUT_METHOD_MINIMAL_H_ diff --git a/ui/base/ime/input_method_win.cc b/ui/base/ime/input_method_win.cc index 52e85a7699..5a30792e43 100644 --- a/ui/base/ime/input_method_win.cc +++ b/ui/base/ime/input_method_win.cc @@ -73,7 +73,7 @@ bool InputMethodWin::DispatchKeyEvent(const ui::KeyEvent& event) { } } - return DispatchKeyEventPostIME(native_key_event); + return DispatchKeyEventPostIME(event); } void InputMethodWin::OnInputLocaleChanged() { @@ -364,9 +364,7 @@ bool InputMethodWin::DispatchFabricatedKeyEvent(const ui::KeyEvent& event) { return true; } } - return DispatchFabricatedKeyEventPostIME(event.type(), - event.key_code(), - event.flags()); + return DispatchKeyEventPostIME(event); } } // namespace ui diff --git a/ui/base/ime/linux/fake_input_method_context.cc b/ui/base/ime/linux/fake_input_method_context.cc index d52aa8a6f8..434dcf6704 100644 --- a/ui/base/ime/linux/fake_input_method_context.cc +++ b/ui/base/ime/linux/fake_input_method_context.cc @@ -11,7 +11,7 @@ FakeInputMethodContext::FakeInputMethodContext() {} // Overriden from ui::LinuxInputMethodContext bool FakeInputMethodContext::DispatchKeyEvent( - const base::NativeEvent& /* native_key_event */) { + const ui::KeyEvent& /* key_event */) { return false; } diff --git a/ui/base/ime/linux/fake_input_method_context.h b/ui/base/ime/linux/fake_input_method_context.h index c27d778c0b..9d9681a1e7 100644 --- a/ui/base/ime/linux/fake_input_method_context.h +++ b/ui/base/ime/linux/fake_input_method_context.h @@ -15,8 +15,7 @@ class FakeInputMethodContext : public LinuxInputMethodContext { FakeInputMethodContext(); // Overriden from ui::LinuxInputMethodContext - virtual bool DispatchKeyEvent(const base::NativeEvent& native_key_event) - OVERRIDE; + virtual bool DispatchKeyEvent(const ui::KeyEvent& key_event) OVERRIDE; virtual void Reset() OVERRIDE; virtual base::i18n::TextDirection GetInputTextDirection() const OVERRIDE; virtual void OnTextInputTypeChanged(ui::TextInputType text_input_type) diff --git a/ui/base/ime/linux/linux_input_method_context.h b/ui/base/ime/linux/linux_input_method_context.h index 2c13a5c4cd..2466afd1c7 100644 --- a/ui/base/ime/linux/linux_input_method_context.h +++ b/ui/base/ime/linux/linux_input_method_context.h @@ -5,7 +5,6 @@ #ifndef UI_BASE_IME_LINUX_LINUX_INPUT_METHOD_CONTEXT_H_ #define UI_BASE_IME_LINUX_LINUX_INPUT_METHOD_CONTEXT_H_ -#include "base/event_types.h" #include "base/i18n/rtl.h" #include "base/strings/string16.h" #include "ui/base/ime/text_input_type.h" @@ -18,6 +17,7 @@ class Rect; namespace ui { struct CompositionText; +class KeyEvent; // An interface of input method context for input method frameworks on // GNU/Linux and likes. @@ -28,7 +28,7 @@ class UI_EXPORT LinuxInputMethodContext { // Dispatches the key event to an underlying IME. Returns true if the key // event is handled, otherwise false. A client must set the text input type // before dispatching a key event. - virtual bool DispatchKeyEvent(const base::NativeEvent& native_key_event) = 0; + virtual bool DispatchKeyEvent(const ui::KeyEvent& key_event) = 0; // Resets the context. A client needs to call OnTextInputTypeChanged() again // before calling DispatchKeyEvent(). diff --git a/ui/base/ime/text_input_client.h b/ui/base/ime/text_input_client.h index 35a6884e14..8623064f3c 100644 --- a/ui/base/ime/text_input_client.h +++ b/ui/base/ime/text_input_client.h @@ -43,7 +43,7 @@ class UI_EXPORT TextInputClient { // Inserts a given text at the insertion point. Current composition text or // selection will be removed. This method should never be called when the // current text input type is TEXT_INPUT_TYPE_NONE. - virtual void InsertText(const string16& text) = 0; + virtual void InsertText(const base::string16& text) = 0; // Inserts a single char at the insertion point. Unlike above InsertText() // method, this method has an extra |flags| parameter indicating the modifier @@ -53,7 +53,7 @@ class UI_EXPORT TextInputClient { // preceding key press event should not be a VKEY_PROCESSKEY. // This method will be called whenever a char is generated by the keyboard, // even if the current text input type is TEXT_INPUT_TYPE_NONE. - virtual void InsertChar(char16 ch, int flags) = 0; + virtual void InsertChar(base::char16 ch, int flags) = 0; // Input context information ------------------------------------------------- @@ -121,8 +121,8 @@ class UI_EXPORT TextInputClient { // The result will be stored into |*text|. // Returns false if the operation is not supported or the specified range // is out of the text range returned by GetTextRange(). - virtual bool GetTextFromRange( - const gfx::Range& range, string16* text) const = 0; + virtual bool GetTextFromRange(const gfx::Range& range, + base::string16* text) const = 0; // Miscellaneous ------------------------------------------------------------ diff --git a/ui/base/l10n/l10n_util.cc b/ui/base/l10n/l10n_util.cc index 3757d2f3dc..b610e9662d 100644 --- a/ui/base/l10n/l10n_util.cc +++ b/ui/base/l10n/l10n_util.cc @@ -253,11 +253,12 @@ bool IsLocaleAvailable(const std::string& locale) { // means text such as "Google Chrome foo bar..." will be layed out LTR even // if "foo bar" is RTL. So this function prepends the necessary RLM in such // cases. -void AdjustParagraphDirectionality(string16* paragraph) { +void AdjustParagraphDirectionality(base::string16* paragraph) { #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) if (base::i18n::IsRTL() && base::i18n::StringContainsStrongRTLChars(*paragraph)) { - paragraph->insert(0, 1, static_cast<char16>(base::i18n::kRightToLeftMark)); + paragraph->insert(0, 1, + static_cast<base::char16>(base::i18n::kRightToLeftMark)); } #endif } @@ -498,7 +499,7 @@ std::string GetApplicationLocale(const std::string& pref_locale) { bool IsLocaleNameTranslated(const char* locale, const std::string& display_locale) { - string16 display_name = + base::string16 display_name = l10n_util::GetDisplayNameForLocale(locale, display_locale, false); // Because ICU sets the error code to U_USING_DEFAULT_WARNING whether or not // uloc_getDisplayName returns the actual translation or the default @@ -509,9 +510,9 @@ bool IsLocaleNameTranslated(const char* locale, return !IsStringASCII(display_name) || UTF16ToASCII(display_name) != locale; } -string16 GetDisplayNameForLocale(const std::string& locale, - const std::string& display_locale, - bool is_for_ui) { +base::string16 GetDisplayNameForLocale(const std::string& locale, + const std::string& display_locale, + bool is_for_ui) { std::string locale_code = locale; // Internally, we use the language code of zh-CN and zh-TW, but we want the // display names to be Chinese (Simplified) and Chinese (Traditional) instead @@ -534,7 +535,7 @@ string16 GetDisplayNameForLocale(const std::string& locale, else if (locale_code == "zh-TW") locale_code = "zh-Hant"; - string16 display_name; + base::string16 display_name; #if defined(OS_ANDROID) // Use Java API to get locale display name so that we can remove most of // the lang data from icu data to reduce binary size, except for zh-Hans and @@ -562,8 +563,8 @@ string16 GetDisplayNameForLocale(const std::string& locale, return display_name; } -string16 GetDisplayNameForCountry(const std::string& country_code, - const std::string& display_locale) { +base::string16 GetDisplayNameForCountry(const std::string& country_code, + const std::string& display_locale) { return GetDisplayNameForLocale("_" + country_code, display_locale, false); } @@ -663,23 +664,23 @@ std::string GetStringUTF8(int message_id) { return UTF16ToUTF8(GetStringUTF16(message_id)); } -string16 GetStringUTF16(int message_id) { +base::string16 GetStringUTF16(int message_id) { ResourceBundle& rb = ResourceBundle::GetSharedInstance(); - string16 str = rb.GetLocalizedString(message_id); + base::string16 str = rb.GetLocalizedString(message_id); AdjustParagraphDirectionality(&str); return str; } -string16 GetStringFUTF16(int message_id, - const std::vector<string16>& replacements, - std::vector<size_t>* offsets) { +base::string16 GetStringFUTF16(int message_id, + const std::vector<base::string16>& replacements, + std::vector<size_t>* offsets) { // TODO(tc): We could save a string copy if we got the raw string as // a StringPiece and were able to call ReplaceStringPlaceholders with - // a StringPiece format string and string16 substitution strings. In + // a StringPiece format string and base::string16 substitution strings. In // practice, the strings should be relatively short. ResourceBundle& rb = ResourceBundle::GetSharedInstance(); - const string16& format_string = rb.GetLocalizedString(message_id); + const base::string16& format_string = rb.GetLocalizedString(message_id); #ifndef NDEBUG // Make sure every replacement string is being used, so we don't just @@ -709,69 +710,69 @@ string16 GetStringFUTF16(int message_id, } #endif - string16 formatted = ReplaceStringPlaceholders(format_string, replacements, - offsets); + base::string16 formatted = ReplaceStringPlaceholders( + format_string, replacements, offsets); AdjustParagraphDirectionality(&formatted); return formatted; } std::string GetStringFUTF8(int message_id, - const string16& a) { + const base::string16& a) { return UTF16ToUTF8(GetStringFUTF16(message_id, a)); } std::string GetStringFUTF8(int message_id, - const string16& a, - const string16& b) { + const base::string16& a, + const base::string16& b) { return UTF16ToUTF8(GetStringFUTF16(message_id, a, b)); } std::string GetStringFUTF8(int message_id, - const string16& a, - const string16& b, - const string16& c) { + const base::string16& a, + const base::string16& b, + const base::string16& c) { return UTF16ToUTF8(GetStringFUTF16(message_id, a, b, c)); } std::string GetStringFUTF8(int message_id, - const string16& a, - const string16& b, - const string16& c, - const string16& d) { + const base::string16& a, + const base::string16& b, + const base::string16& c, + const base::string16& d) { return UTF16ToUTF8(GetStringFUTF16(message_id, a, b, c, d)); } -string16 GetStringFUTF16(int message_id, - const string16& a) { - std::vector<string16> replacements; +base::string16 GetStringFUTF16(int message_id, + const base::string16& a) { + std::vector<base::string16> replacements; replacements.push_back(a); return GetStringFUTF16(message_id, replacements, NULL); } -string16 GetStringFUTF16(int message_id, - const string16& a, - const string16& b) { +base::string16 GetStringFUTF16(int message_id, + const base::string16& a, + const base::string16& b) { return GetStringFUTF16(message_id, a, b, NULL); } -string16 GetStringFUTF16(int message_id, - const string16& a, - const string16& b, - const string16& c) { - std::vector<string16> replacements; +base::string16 GetStringFUTF16(int message_id, + const base::string16& a, + const base::string16& b, + const base::string16& c) { + std::vector<base::string16> replacements; replacements.push_back(a); replacements.push_back(b); replacements.push_back(c); return GetStringFUTF16(message_id, replacements, NULL); } -string16 GetStringFUTF16(int message_id, - const string16& a, - const string16& b, - const string16& c, - const string16& d) { - std::vector<string16> replacements; +base::string16 GetStringFUTF16(int message_id, + const base::string16& a, + const base::string16& b, + const base::string16& c, + const base::string16& d) { + std::vector<base::string16> replacements; replacements.push_back(a); replacements.push_back(b); replacements.push_back(c); @@ -779,13 +780,13 @@ string16 GetStringFUTF16(int message_id, return GetStringFUTF16(message_id, replacements, NULL); } -string16 GetStringFUTF16(int message_id, - const string16& a, - const string16& b, - const string16& c, - const string16& d, - const string16& e) { - std::vector<string16> replacements; +base::string16 GetStringFUTF16(int message_id, + const base::string16& a, + const base::string16& b, + const base::string16& c, + const base::string16& d, + const base::string16& e) { + std::vector<base::string16> replacements; replacements.push_back(a); replacements.push_back(b); replacements.push_back(c); @@ -794,39 +795,41 @@ string16 GetStringFUTF16(int message_id, return GetStringFUTF16(message_id, replacements, NULL); } -string16 GetStringFUTF16(int message_id, const string16& a, size_t* offset) { +base::string16 GetStringFUTF16(int message_id, + const base::string16& a, + size_t* offset) { DCHECK(offset); std::vector<size_t> offsets; - std::vector<string16> replacements; + std::vector<base::string16> replacements; replacements.push_back(a); - string16 result = GetStringFUTF16(message_id, replacements, &offsets); + base::string16 result = GetStringFUTF16(message_id, replacements, &offsets); DCHECK(offsets.size() == 1); *offset = offsets[0]; return result; } -string16 GetStringFUTF16(int message_id, - const string16& a, - const string16& b, - std::vector<size_t>* offsets) { - std::vector<string16> replacements; +base::string16 GetStringFUTF16(int message_id, + const base::string16& a, + const base::string16& b, + std::vector<size_t>* offsets) { + std::vector<base::string16> replacements; replacements.push_back(a); replacements.push_back(b); return GetStringFUTF16(message_id, replacements, offsets); } -string16 GetStringFUTF16Int(int message_id, int a) { +base::string16 GetStringFUTF16Int(int message_id, int a) { return GetStringFUTF16(message_id, UTF8ToUTF16(base::IntToString(a))); } -string16 GetStringFUTF16Int(int message_id, int64 a) { +base::string16 GetStringFUTF16Int(int message_id, int64 a) { return GetStringFUTF16(message_id, UTF8ToUTF16(base::Int64ToString(a))); } -// Specialization of operator() method for string16 version. +// Specialization of operator() method for base::string16 version. template <> -bool StringComparator<string16>::operator()(const string16& lhs, - const string16& rhs) { +bool StringComparator<base::string16>::operator()(const base::string16& lhs, + const base::string16& rhs) { // If we can not get collator instance for specified locale, just do simple // string compare. if (!collator_) @@ -835,7 +838,7 @@ bool StringComparator<string16>::operator()(const string16& lhs, UCOL_LESS; }; -string16 GetPluralStringFUTF16(const std::vector<int>& message_ids, +base::string16 GetPluralStringFUTF16(const std::vector<int>& message_ids, int number) { scoped_ptr<icu::PluralFormat> format = BuildPluralFormat(message_ids); DCHECK(format); @@ -844,7 +847,7 @@ string16 GetPluralStringFUTF16(const std::vector<int>& message_ids, icu::UnicodeString result_files_string = format->format(number, err); int capacity = result_files_string.length() + 1; DCHECK_GT(capacity, 1); - string16 result; + base::string16 result; result_files_string.extract( static_cast<UChar*>(WriteInto(&result, capacity)), capacity, err); DCHECK(U_SUCCESS(err)); @@ -857,7 +860,7 @@ std::string GetPluralStringFUTF8(const std::vector<int>& message_ids, } void SortStrings16(const std::string& locale, - std::vector<string16>* strings) { + std::vector<base::string16>* strings) { SortVectorWithStringKey(locale, strings, false); } diff --git a/ui/base/l10n/l10n_util.h b/ui/base/l10n/l10n_util.h index 2207e6d385..2d254fa741 100644 --- a/ui/base/l10n/l10n_util.h +++ b/ui/base/l10n/l10n_util.h @@ -55,13 +55,15 @@ bool IsLocaleSupportedByOS(const std::string& locale); // in the UI thread. // If |is_for_ui| is true, U+200F is appended so that it can be // rendered properly in a RTL Chrome. -UI_EXPORT string16 GetDisplayNameForLocale(const std::string& locale, - const std::string& display_locale, - bool is_for_ui); +UI_EXPORT base::string16 GetDisplayNameForLocale( + const std::string& locale, + const std::string& display_locale, + bool is_for_ui); // Returns the display name of the |country_code| in |display_locale|. -UI_EXPORT string16 GetDisplayNameForCountry(const std::string& country_code, - const std::string& display_locale); +UI_EXPORT base::string16 GetDisplayNameForCountry( + const std::string& country_code, + const std::string& display_locale); // Converts all - into _, to be consistent with ICU and file system names. UI_EXPORT std::string NormalizeLocale(const std::string& locale); @@ -88,79 +90,81 @@ UI_EXPORT bool IsValidLocaleSyntax(const std::string& locale); // Pulls resource string from the string bundle and returns it. UI_EXPORT std::string GetStringUTF8(int message_id); -UI_EXPORT string16 GetStringUTF16(int message_id); +UI_EXPORT base::string16 GetStringUTF16(int message_id); // Get a resource string and replace $i with replacements[i] for all // i < replacements.size(). Additionally, $$ is replaced by $. // If non-NULL |offsets| will be replaced with the start points of the replaced // strings. -UI_EXPORT string16 GetStringFUTF16(int message_id, - const std::vector<string16>& replacements, - std::vector<size_t>* offsets); +UI_EXPORT base::string16 GetStringFUTF16( + int message_id, + const std::vector<base::string16>& replacements, + std::vector<size_t>* offsets); // Convenience wrappers for the above. -UI_EXPORT string16 GetStringFUTF16(int message_id, - const string16& a); -UI_EXPORT string16 GetStringFUTF16(int message_id, - const string16& a, - const string16& b); -UI_EXPORT string16 GetStringFUTF16(int message_id, - const string16& a, - const string16& b, - const string16& c); -UI_EXPORT string16 GetStringFUTF16(int message_id, - const string16& a, - const string16& b, - const string16& c, - const string16& d); -UI_EXPORT string16 GetStringFUTF16(int message_id, - const string16& a, - const string16& b, - const string16& c, - const string16& d, - const string16& e); +UI_EXPORT base::string16 GetStringFUTF16(int message_id, + const base::string16& a); +UI_EXPORT base::string16 GetStringFUTF16(int message_id, + const base::string16& a, + const base::string16& b); +UI_EXPORT base::string16 GetStringFUTF16(int message_id, + const base::string16& a, + const base::string16& b, + const base::string16& c); +UI_EXPORT base::string16 GetStringFUTF16(int message_id, + const base::string16& a, + const base::string16& b, + const base::string16& c, + const base::string16& d); +UI_EXPORT base::string16 GetStringFUTF16(int message_id, + const base::string16& a, + const base::string16& b, + const base::string16& c, + const base::string16& d, + const base::string16& e); UI_EXPORT std::string GetStringFUTF8(int message_id, - const string16& a); + const base::string16& a); UI_EXPORT std::string GetStringFUTF8(int message_id, - const string16& a, - const string16& b); + const base::string16& a, + const base::string16& b); UI_EXPORT std::string GetStringFUTF8(int message_id, - const string16& a, - const string16& b, - const string16& c); + const base::string16& a, + const base::string16& b, + const base::string16& c); UI_EXPORT std::string GetStringFUTF8(int message_id, - const string16& a, - const string16& b, - const string16& c, - const string16& d); + const base::string16& a, + const base::string16& b, + const base::string16& c, + const base::string16& d); // Variants that return the offset(s) of the replaced parameters. The // vector based version returns offsets ordered by parameter. For example if // invoked with a and b offsets[0] gives the offset for a and offsets[1] the // offset of b regardless of where the parameters end up in the string. -UI_EXPORT string16 GetStringFUTF16(int message_id, - const string16& a, - size_t* offset); -UI_EXPORT string16 GetStringFUTF16(int message_id, - const string16& a, - const string16& b, - std::vector<size_t>* offsets); +UI_EXPORT base::string16 GetStringFUTF16(int message_id, + const base::string16& a, + size_t* offset); +UI_EXPORT base::string16 GetStringFUTF16(int message_id, + const base::string16& a, + const base::string16& b, + std::vector<size_t>* offsets); // Convenience functions to get a string with a single number as a parameter. -UI_EXPORT string16 GetStringFUTF16Int(int message_id, int a); -string16 GetStringFUTF16Int(int message_id, int64 a); +UI_EXPORT base::string16 GetStringFUTF16Int(int message_id, int a); +base::string16 GetStringFUTF16Int(int message_id, int64 a); // Get a resource string using |number| to decide which of |message_ids| should // be used. |message_ids| must be size 6 and in order: default, singular, zero, // two, few, many. -UI_EXPORT string16 GetPluralStringFUTF16(const std::vector<int>& message_ids, - int number); +UI_EXPORT base::string16 GetPluralStringFUTF16( + const std::vector<int>& message_ids, + int number); UI_EXPORT std::string GetPluralStringFUTF8(const std::vector<int>& message_ids, int number); -// In place sorting of string16 strings using collation rules for |locale|. +// In place sorting of base::string16 strings using collation rules for |locale|. UI_EXPORT void SortStrings16(const std::string& locale, - std::vector<string16>* strings); + std::vector<base::string16>* strings); // Returns a vector of available locale codes. E.g., a vector containing // en-US, es, fr, fi, pt-PT, pt-BR, etc. diff --git a/ui/base/l10n/l10n_util_collator.h b/ui/base/l10n/l10n_util_collator.h index b91b804fc3..a0bfb92ebb 100644 --- a/ui/base/l10n/l10n_util_collator.h +++ b/ui/base/l10n/l10n_util_collator.h @@ -21,8 +21,8 @@ namespace l10n_util { // operator (), comparing the string results using a collator. template <class T, class Method> class StringMethodComparatorWithCollator - : public std::binary_function<const string16&, - const string16&, + : public std::binary_function<const base::string16&, + const base::string16&, bool> { public: StringMethodComparatorWithCollator(icu::Collator* collator, Method method) @@ -43,9 +43,10 @@ class StringMethodComparatorWithCollator // Used by SortStringsUsingMethod. Invokes a method on the objects passed to // operator (), comparing the string results using <. template <class T, class Method> -class StringMethodComparator : public std::binary_function<const string16&, - const string16&, - bool> { +class StringMethodComparator + : public std::binary_function<const base::string16&, + const base::string16&, + bool> { public: explicit StringMethodComparator(Method method) : method_(method) { } @@ -93,10 +94,10 @@ class StringComparator : public std::binary_function<const Element&, // Returns true if lhs precedes rhs. bool operator()(const Element& lhs, const Element& rhs) { - const string16& lhs_string_key = lhs.GetStringKey(); - const string16& rhs_string_key = rhs.GetStringKey(); + const base::string16& lhs_string_key = lhs.GetStringKey(); + const base::string16& rhs_string_key = rhs.GetStringKey(); - return StringComparator<string16>(collator_)(lhs_string_key, + return StringComparator<base::string16>(collator_)(lhs_string_key, rhs_string_key); } @@ -106,8 +107,8 @@ class StringComparator : public std::binary_function<const Element&, // Specialization of operator() method for string16 version. template <> UI_EXPORT -bool StringComparator<string16>::operator()(const string16& lhs, - const string16& rhs); +bool StringComparator<base::string16>::operator()(const base::string16& lhs, + const base::string16& rhs); // In place sorting of |elements| of a vector according to the string key of // each element in the vector by using collation rules for |locale|. diff --git a/ui/base/l10n/time_format.cc b/ui/base/l10n/time_format.cc index aaa35a9969..f3b16a3f96 100644 --- a/ui/base/l10n/time_format.cc +++ b/ui/base/l10n/time_format.cc @@ -281,10 +281,10 @@ icu::PluralFormat* TimeFormatter::createFallbackFormat( return format; } -string16 FormatTimeImpl(const TimeDelta& delta, FormatType format_type) { +base::string16 FormatTimeImpl(const TimeDelta& delta, FormatType format_type) { if (delta.ToInternalValue() < 0) { NOTREACHED() << "Negative duration"; - return string16(); + return base::string16(); } int number; @@ -323,7 +323,7 @@ string16 FormatTimeImpl(const TimeDelta& delta, FormatType format_type) { DCHECK(U_SUCCESS(error)); int capacity = time_string.length() + 1; DCHECK_GT(capacity, 1); - string16 result; + base::string16 result; time_string.extract(static_cast<UChar*>(WriteInto(&result, capacity)), capacity, error); DCHECK(U_SUCCESS(error)); @@ -335,32 +335,32 @@ string16 FormatTimeImpl(const TimeDelta& delta, FormatType format_type) { namespace ui { // static -string16 TimeFormat::TimeElapsed(const TimeDelta& delta) { +base::string16 TimeFormat::TimeElapsed(const TimeDelta& delta) { return FormatTimeImpl(delta, FORMAT_ELAPSED); } // static -string16 TimeFormat::TimeRemaining(const TimeDelta& delta) { +base::string16 TimeFormat::TimeRemaining(const TimeDelta& delta) { return FormatTimeImpl(delta, FORMAT_REMAINING); } // static -string16 TimeFormat::TimeRemainingLong(const TimeDelta& delta) { +base::string16 TimeFormat::TimeRemainingLong(const TimeDelta& delta) { return FormatTimeImpl(delta, FORMAT_REMAINING_LONG); } // static -string16 TimeFormat::TimeRemainingShort(const TimeDelta& delta) { +base::string16 TimeFormat::TimeRemainingShort(const TimeDelta& delta) { return FormatTimeImpl(delta, FORMAT_SHORT); } // static -string16 TimeFormat::TimeDurationLong(const TimeDelta& delta) { +base::string16 TimeFormat::TimeDurationLong(const TimeDelta& delta) { return FormatTimeImpl(delta, FORMAT_DURATION_LONG); } // static -string16 TimeFormat::RelativeDate( +base::string16 TimeFormat::RelativeDate( const Time& time, const Time* optional_midnight_today) { Time midnight_today = optional_midnight_today ? *optional_midnight_today : @@ -369,12 +369,12 @@ string16 TimeFormat::RelativeDate( Time tomorrow = midnight_today + day; Time yesterday = midnight_today - day; if (time >= tomorrow) - return string16(); + return base::string16(); else if (time >= midnight_today) return l10n_util::GetStringUTF16(IDS_PAST_TIME_TODAY); else if (time >= yesterday) return l10n_util::GetStringUTF16(IDS_PAST_TIME_YESTERDAY); - return string16(); + return base::string16(); } } // namespace ui diff --git a/ui/base/l10n/time_format.h b/ui/base/l10n/time_format.h index 075b6989ce..0b3a1be353 100644 --- a/ui/base/l10n/time_format.h +++ b/ui/base/l10n/time_format.h @@ -25,21 +25,21 @@ class UI_EXPORT TimeFormat { // in-progress operations and users have different expectations of units. // Returns times in elapsed-format: "3 mins ago", "2 days ago". - static string16 TimeElapsed(const base::TimeDelta& delta); + static base::string16 TimeElapsed(const base::TimeDelta& delta); // Returns times in remaining-format: "3 mins left", "2 days left". - static string16 TimeRemaining(const base::TimeDelta& delta); + static base::string16 TimeRemaining(const base::TimeDelta& delta); // Returns times in remaining-long-format: "3 minutes left", "2 days left". // Currently, this only affects the minutes in long format, the rest // of the time units are formatted the same as TimeRemaining does. - static string16 TimeRemainingLong(const base::TimeDelta& delta); + static base::string16 TimeRemainingLong(const base::TimeDelta& delta); // Returns times in short-format: "3 mins", "2 days". - static string16 TimeRemainingShort(const base::TimeDelta& delta); + static base::string16 TimeRemainingShort(const base::TimeDelta& delta); // Return times in long-format: "2 hours", "25 minutes". - static string16 TimeDurationLong(const base::TimeDelta& delta); + static base::string16 TimeDurationLong(const base::TimeDelta& delta); // For displaying a relative time in the past. This method returns either // "Today", "Yesterday", or an empty string if it's older than that. Returns @@ -55,8 +55,8 @@ class UI_EXPORT TimeFormat { // If NULL, the current day's midnight will be retrieved, which can be // slow. If many items are being processed, it is best to get the current // time once at the beginning and pass it for each computation. - static string16 RelativeDate(const base::Time& time, - const base::Time* optional_midnight_today); + static base::string16 RelativeDate(const base::Time& time, + const base::Time* optional_midnight_today); private: DISALLOW_IMPLICIT_CONSTRUCTORS(TimeFormat); diff --git a/ui/base/layout.cc b/ui/base/layout.cc index 1e7e406d46..2c1fb51a39 100644 --- a/ui/base/layout.cc +++ b/ui/base/layout.cc @@ -61,7 +61,7 @@ bool UseTouchOptimizedUI() { #endif // defined(OS_WIN) const float kScaleFactorScales[] = {1.0f, 1.0f, 1.25f, 1.33f, 1.4f, 1.5f, 1.8f, - 2.0f}; + 2.0f, 3.0f}; COMPILE_ASSERT(NUM_SCALE_FACTORS == arraysize(kScaleFactorScales), kScaleFactorScales_incorrect_size); diff --git a/ui/base/layout.h b/ui/base/layout.h index 50b0e50cab..6179a84f72 100644 --- a/ui/base/layout.h +++ b/ui/base/layout.h @@ -42,6 +42,7 @@ enum ScaleFactor { SCALE_FACTOR_150P, SCALE_FACTOR_180P, SCALE_FACTOR_200P, + SCALE_FACTOR_300P, NUM_SCALE_FACTORS // This always appears last. }; diff --git a/ui/base/layout_unittest.cc b/ui/base/layout_unittest.cc index 8ac2e2d838..b082beab72 100644 --- a/ui/base/layout_unittest.cc +++ b/ui/base/layout_unittest.cc @@ -21,6 +21,7 @@ TEST(LayoutTest, GetScaleFactorScale) { EXPECT_FLOAT_EQ(1.5f, GetImageScale(SCALE_FACTOR_150P)); EXPECT_FLOAT_EQ(1.8f, GetImageScale(SCALE_FACTOR_180P)); EXPECT_FLOAT_EQ(2.0f, GetImageScale(SCALE_FACTOR_200P)); + EXPECT_FLOAT_EQ(3.0f, GetImageScale(SCALE_FACTOR_300P)); } TEST(LayoutTest, GetScaleFactorFromScalePartlySupported) { @@ -60,7 +61,9 @@ TEST(LayoutTest, GetScaleFactorFromScaleAllSupported) { EXPECT_EQ(SCALE_FACTOR_200P, GetSupportedScaleFactor(1.91f)); EXPECT_EQ(SCALE_FACTOR_200P, GetSupportedScaleFactor(2.0f)); EXPECT_EQ(SCALE_FACTOR_200P, GetSupportedScaleFactor(2.1f)); - EXPECT_EQ(SCALE_FACTOR_200P, GetSupportedScaleFactor(999.0f)); + EXPECT_EQ(SCALE_FACTOR_300P, GetSupportedScaleFactor(3.0f)); + EXPECT_EQ(SCALE_FACTOR_300P, GetSupportedScaleFactor(3.1f)); + EXPECT_EQ(SCALE_FACTOR_300P, GetSupportedScaleFactor(999.0f)); } } // namespace ui diff --git a/ui/base/resource/data_pack.cc b/ui/base/resource/data_pack.cc index 54694d9129..8f8f182244 100644 --- a/ui/base/resource/data_pack.cc +++ b/ui/base/resource/data_pack.cc @@ -216,13 +216,13 @@ ui::ScaleFactor DataPack::GetScaleFactor() const { bool DataPack::WritePack(const base::FilePath& path, const std::map<uint16, base::StringPiece>& resources, TextEncodingType textEncodingType) { - FILE* file = file_util::OpenFile(path, "wb"); + FILE* file = base::OpenFile(path, "wb"); if (!file) return false; if (fwrite(&kFileFormatVersion, sizeof(kFileFormatVersion), 1, file) != 1) { LOG(ERROR) << "Failed to write file version"; - file_util::CloseFile(file); + base::CloseFile(file); return false; } @@ -231,7 +231,7 @@ bool DataPack::WritePack(const base::FilePath& path, uint32 entry_count = resources.size(); if (fwrite(&entry_count, sizeof(entry_count), 1, file) != 1) { LOG(ERROR) << "Failed to write entry count"; - file_util::CloseFile(file); + base::CloseFile(file); return false; } @@ -239,14 +239,14 @@ bool DataPack::WritePack(const base::FilePath& path, textEncodingType != BINARY) { LOG(ERROR) << "Invalid text encoding type, got " << textEncodingType << ", expected between " << BINARY << " and " << UTF16; - file_util::CloseFile(file); + base::CloseFile(file); return false; } uint8 write_buffer = textEncodingType; if (fwrite(&write_buffer, sizeof(uint8), 1, file) != 1) { LOG(ERROR) << "Failed to write file text resources encoding"; - file_util::CloseFile(file); + base::CloseFile(file); return false; } @@ -260,13 +260,13 @@ bool DataPack::WritePack(const base::FilePath& path, uint16 resource_id = it->first; if (fwrite(&resource_id, sizeof(resource_id), 1, file) != 1) { LOG(ERROR) << "Failed to write id for " << resource_id; - file_util::CloseFile(file); + base::CloseFile(file); return false; } if (fwrite(&data_offset, sizeof(data_offset), 1, file) != 1) { LOG(ERROR) << "Failed to write offset for " << resource_id; - file_util::CloseFile(file); + base::CloseFile(file); return false; } @@ -278,13 +278,13 @@ bool DataPack::WritePack(const base::FilePath& path, uint16 resource_id = 0; if (fwrite(&resource_id, sizeof(resource_id), 1, file) != 1) { LOG(ERROR) << "Failed to write extra resource id."; - file_util::CloseFile(file); + base::CloseFile(file); return false; } if (fwrite(&data_offset, sizeof(data_offset), 1, file) != 1) { LOG(ERROR) << "Failed to write extra offset."; - file_util::CloseFile(file); + base::CloseFile(file); return false; } @@ -293,12 +293,12 @@ bool DataPack::WritePack(const base::FilePath& path, it != resources.end(); ++it) { if (fwrite(it->second.data(), it->second.length(), 1, file) != 1) { LOG(ERROR) << "Failed to write data for " << it->first; - file_util::CloseFile(file); + base::CloseFile(file); return false; } } - file_util::CloseFile(file); + base::CloseFile(file); return true; } diff --git a/ui/base/resource/resource_bundle.cc b/ui/base/resource/resource_bundle.cc index 8b622ccd46..b5f8f6138d 100644 --- a/ui/base/resource/resource_bundle.cc +++ b/ui/base/resource/resource_bundle.cc @@ -442,8 +442,8 @@ base::StringPiece ResourceBundle::GetRawDataResourceForScale( return base::StringPiece(); } -string16 ResourceBundle::GetLocalizedString(int message_id) { - string16 string; +base::string16 ResourceBundle::GetLocalizedString(int message_id) { + base::string16 string; if (delegate_ && delegate_->GetLocalizedString(message_id, &string)) return string; @@ -455,7 +455,7 @@ string16 ResourceBundle::GetLocalizedString(int message_id) { // string (better than crashing). if (!locale_resources_data_.get()) { LOG(WARNING) << "locale resources are not loaded"; - return string16(); + return base::string16(); } base::StringPiece data; @@ -465,7 +465,7 @@ string16 ResourceBundle::GetLocalizedString(int message_id) { data = GetRawDataResource(message_id); if (data.empty()) { NOTREACHED() << "unable to find resource: " << message_id; - return string16(); + return base::string16(); } } @@ -476,10 +476,10 @@ string16 ResourceBundle::GetLocalizedString(int message_id) { << "requested localized string from binary pack file"; // Data pack encodes strings as either UTF8 or UTF16. - string16 msg; + base::string16 msg; if (encoding == ResourceHandle::UTF16) { - msg = string16(reinterpret_cast<const char16*>(data.data()), - data.length() / 2); + msg = base::string16(reinterpret_cast<const base::char16*>(data.data()), + data.length() / 2); } else if (encoding == ResourceHandle::UTF8) { msg = UTF8ToUTF16(data); } diff --git a/ui/base/resource/resource_bundle.h b/ui/base/resource/resource_bundle.h index bea12c19a2..272c5b3341 100644 --- a/ui/base/resource/resource_bundle.h +++ b/ui/base/resource/resource_bundle.h @@ -105,7 +105,7 @@ class UI_EXPORT ResourceBundle { // Retrieve a localized string. Return true if a string was provided or // false to attempt retrieval of the default string. - virtual bool GetLocalizedString(int message_id, string16* value) = 0; + virtual bool GetLocalizedString(int message_id, base::string16* value) = 0; // Returns a font or NULL to attempt retrieval of the default resource. virtual scoped_ptr<gfx::Font> GetFont(FontStyle style) = 0; @@ -230,7 +230,7 @@ class UI_EXPORT ResourceBundle { // Get a localized string given a message id. Returns an empty // string if the message_id is not found. - string16 GetLocalizedString(int message_id); + base::string16 GetLocalizedString(int message_id); // Returns the font list for the specified style. const gfx::FontList& GetFontList(FontStyle style); diff --git a/ui/base/strings/ui_strings.grd b/ui/base/strings/ui_strings.grd index 0875f739b5..89af18972c 100644 --- a/ui/base/strings/ui_strings.grd +++ b/ui/base/strings/ui_strings.grd @@ -1604,7 +1604,10 @@ need to be translated for each locale.--> </message> <message name="IDS_APP_LIST_FOLDER_NAME_PLACEHOLDER" desc="The placeholder text for app list folder name."> Unnamed Folder - </message> + </message> + <message name="IDS_APP_LIST_SPEECH_HINT_TEXT" desc="The text label in the speech recognition UI to ask the user to speak the search query"> + Speak now + </message> </messages> </release> </grit> diff --git a/ui/base/strings/ui_strings.target.darwin-arm.mk b/ui/base/strings/ui_strings.target.darwin-arm.mk index b96d94d3f3..d2251b9b8c 100644 --- a/ui/base/strings/ui_strings.target.darwin-arm.mk +++ b/ui/base/strings/ui_strings.target.darwin-arm.mk @@ -20,7 +20,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: gyp_shared_inter $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/ui_strings.grd $(LOCAL_PATH)/ui/base/strings/ui_strings_am.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ar.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bg.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ca.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_cs.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_da.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_de.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_el.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_et.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fa.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fil.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_gu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_id.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_it.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_iw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ja.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_kn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ko.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lt.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ml.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_mr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ms.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_nl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_no.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ro.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ru.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ta.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_te.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_th.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_tr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_uk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_vi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_strings.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_am.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ; $(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_ar.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ; @@ -84,7 +84,7 @@ $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/app_locale_settings.grd $(LOCAL_PATH)/ui/base/strings/app_locale_settings_am.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ar.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bg.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ca.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_cs.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_da.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_de.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_el.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_et.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fa.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fil.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_gu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_he.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_id.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_it.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ja.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_kn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ko.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lt.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ml.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_mr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ms.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nb.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ro.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ru.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sw.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ta.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_te.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_th.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_tr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_uk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_vi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from app_locale_settings.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_am.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ; $(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_ar.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ; diff --git a/ui/base/strings/ui_strings.target.darwin-mips.mk b/ui/base/strings/ui_strings.target.darwin-mips.mk index b96d94d3f3..d2251b9b8c 100644 --- a/ui/base/strings/ui_strings.target.darwin-mips.mk +++ b/ui/base/strings/ui_strings.target.darwin-mips.mk @@ -20,7 +20,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: gyp_shared_inter $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/ui_strings.grd $(LOCAL_PATH)/ui/base/strings/ui_strings_am.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ar.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bg.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ca.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_cs.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_da.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_de.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_el.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_et.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fa.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fil.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_gu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_id.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_it.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_iw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ja.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_kn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ko.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lt.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ml.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_mr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ms.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_nl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_no.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ro.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ru.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ta.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_te.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_th.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_tr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_uk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_vi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_strings.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_am.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ; $(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_ar.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ; @@ -84,7 +84,7 @@ $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/app_locale_settings.grd $(LOCAL_PATH)/ui/base/strings/app_locale_settings_am.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ar.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bg.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ca.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_cs.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_da.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_de.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_el.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_et.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fa.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fil.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_gu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_he.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_id.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_it.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ja.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_kn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ko.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lt.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ml.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_mr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ms.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nb.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ro.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ru.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sw.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ta.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_te.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_th.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_tr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_uk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_vi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from app_locale_settings.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_am.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ; $(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_ar.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ; diff --git a/ui/base/strings/ui_strings.target.darwin-x86.mk b/ui/base/strings/ui_strings.target.darwin-x86.mk index b96d94d3f3..93a301977d 100644 --- a/ui/base/strings/ui_strings.target.darwin-x86.mk +++ b/ui/base/strings/ui_strings.target.darwin-x86.mk @@ -20,7 +20,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: gyp_shared_inter $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/ui_strings.grd $(LOCAL_PATH)/ui/base/strings/ui_strings_am.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ar.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bg.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ca.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_cs.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_da.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_de.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_el.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_et.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fa.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fil.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_gu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_id.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_it.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_iw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ja.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_kn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ko.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lt.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ml.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_mr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ms.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_nl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_no.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ro.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ru.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ta.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_te.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_th.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_tr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_uk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_vi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_strings.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_am.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ; $(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_ar.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ; @@ -84,7 +84,7 @@ $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/app_locale_settings.grd $(LOCAL_PATH)/ui/base/strings/app_locale_settings_am.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ar.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bg.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ca.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_cs.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_da.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_de.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_el.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_et.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fa.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fil.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_gu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_he.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_id.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_it.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ja.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_kn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ko.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lt.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ml.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_mr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ms.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nb.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ro.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ru.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sw.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ta.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_te.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_th.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_tr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_uk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_vi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from app_locale_settings.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_am.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ; $(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_ar.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ; diff --git a/ui/base/strings/ui_strings.target.linux-arm.mk b/ui/base/strings/ui_strings.target.linux-arm.mk index b96d94d3f3..d2251b9b8c 100644 --- a/ui/base/strings/ui_strings.target.linux-arm.mk +++ b/ui/base/strings/ui_strings.target.linux-arm.mk @@ -20,7 +20,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: gyp_shared_inter $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/ui_strings.grd $(LOCAL_PATH)/ui/base/strings/ui_strings_am.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ar.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bg.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ca.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_cs.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_da.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_de.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_el.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_et.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fa.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fil.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_gu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_id.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_it.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_iw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ja.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_kn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ko.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lt.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ml.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_mr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ms.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_nl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_no.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ro.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ru.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ta.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_te.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_th.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_tr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_uk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_vi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_strings.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_am.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ; $(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_ar.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ; @@ -84,7 +84,7 @@ $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/app_locale_settings.grd $(LOCAL_PATH)/ui/base/strings/app_locale_settings_am.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ar.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bg.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ca.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_cs.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_da.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_de.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_el.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_et.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fa.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fil.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_gu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_he.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_id.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_it.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ja.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_kn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ko.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lt.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ml.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_mr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ms.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nb.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ro.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ru.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sw.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ta.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_te.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_th.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_tr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_uk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_vi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from app_locale_settings.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_am.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ; $(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_ar.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ; diff --git a/ui/base/strings/ui_strings.target.linux-mips.mk b/ui/base/strings/ui_strings.target.linux-mips.mk index b96d94d3f3..d2251b9b8c 100644 --- a/ui/base/strings/ui_strings.target.linux-mips.mk +++ b/ui/base/strings/ui_strings.target.linux-mips.mk @@ -20,7 +20,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: gyp_shared_inter $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/ui_strings.grd $(LOCAL_PATH)/ui/base/strings/ui_strings_am.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ar.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bg.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ca.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_cs.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_da.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_de.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_el.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_et.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fa.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fil.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_gu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_id.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_it.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_iw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ja.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_kn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ko.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lt.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ml.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_mr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ms.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_nl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_no.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ro.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ru.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ta.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_te.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_th.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_tr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_uk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_vi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_strings.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_am.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ; $(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_ar.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ; @@ -84,7 +84,7 @@ $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/app_locale_settings.grd $(LOCAL_PATH)/ui/base/strings/app_locale_settings_am.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ar.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bg.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ca.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_cs.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_da.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_de.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_el.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_et.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fa.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fil.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_gu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_he.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_id.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_it.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ja.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_kn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ko.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lt.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ml.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_mr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ms.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nb.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ro.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ru.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sw.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ta.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_te.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_th.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_tr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_uk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_vi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from app_locale_settings.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_am.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ; $(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_ar.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ; diff --git a/ui/base/strings/ui_strings.target.linux-x86.mk b/ui/base/strings/ui_strings.target.linux-x86.mk index b96d94d3f3..93a301977d 100644 --- a/ui/base/strings/ui_strings.target.linux-x86.mk +++ b/ui/base/strings/ui_strings.target.linux-x86.mk @@ -20,7 +20,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: gyp_shared_inter $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/ui_strings.grd $(LOCAL_PATH)/ui/base/strings/ui_strings_am.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ar.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bg.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ca.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_cs.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_da.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_de.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_el.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_et.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fa.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fil.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_gu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_id.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_it.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_iw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ja.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_kn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ko.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lt.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ml.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_mr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ms.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_nl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_no.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ro.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ru.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ta.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_te.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_th.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_tr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_uk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_vi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_strings.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_am.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ; $(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_ar.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ; @@ -84,7 +84,7 @@ $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/app_locale_settings.grd $(LOCAL_PATH)/ui/base/strings/app_locale_settings_am.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ar.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bg.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ca.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_cs.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_da.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_de.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_el.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_et.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fa.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fil.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_gu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_he.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_id.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_it.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ja.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_kn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ko.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lt.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ml.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_mr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ms.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nb.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ro.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ru.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sw.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ta.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_te.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_th.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_tr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_uk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_vi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from app_locale_settings.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_am.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ; $(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_ar.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ; diff --git a/ui/base/text/bytes_formatting.cc b/ui/base/text/bytes_formatting.cc index db3537287f..02bf55c8b9 100644 --- a/ui/base/text/bytes_formatting.cc +++ b/ui/base/text/bytes_formatting.cc @@ -34,14 +34,14 @@ const int kSpeedStrings[] = { IDS_APP_PEBIBYTES_PER_SECOND }; -string16 FormatBytesInternal(int64 bytes, - DataUnits units, - bool show_units, - const int* const suffix) { +base::string16 FormatBytesInternal(int64 bytes, + DataUnits units, + bool show_units, + const int* const suffix) { DCHECK(units >= DATA_UNITS_BYTE && units <= DATA_UNITS_PEBIBYTE); if (bytes < 0) { NOTREACHED() << "Negative bytes value"; - return string16(); + return base::string16(); } // Put the quantity in the right units. @@ -53,7 +53,7 @@ string16 FormatBytesInternal(int64 bytes, if (bytes != 0 && units != DATA_UNITS_BYTE && unit_amount < 100) fractional_digits = 1; - string16 result = base::FormatDouble(unit_amount, fractional_digits); + base::string16 result = base::FormatDouble(unit_amount, fractional_digits); if (show_units) result = l10n_util::GetStringFUTF16(suffix[units], result); @@ -91,19 +91,23 @@ DataUnits GetByteDisplayUnits(int64 bytes) { return DataUnits(unit_index); } -string16 FormatBytesWithUnits(int64 bytes, DataUnits units, bool show_units) { +base::string16 FormatBytesWithUnits(int64 bytes, + DataUnits units, + bool show_units) { return FormatBytesInternal(bytes, units, show_units, kByteStrings); } -string16 FormatSpeedWithUnits(int64 bytes, DataUnits units, bool show_units) { +base::string16 FormatSpeedWithUnits(int64 bytes, + DataUnits units, + bool show_units) { return FormatBytesInternal(bytes, units, show_units, kSpeedStrings); } -string16 FormatBytes(int64 bytes) { +base::string16 FormatBytes(int64 bytes) { return FormatBytesWithUnits(bytes, GetByteDisplayUnits(bytes), true); } -string16 FormatSpeed(int64 bytes) { +base::string16 FormatSpeed(int64 bytes) { return FormatSpeedWithUnits(bytes, GetByteDisplayUnits(bytes), true); } diff --git a/ui/base/text/bytes_formatting.h b/ui/base/text/bytes_formatting.h index 2b0f517e5a..0e81818338 100644 --- a/ui/base/text/bytes_formatting.h +++ b/ui/base/text/bytes_formatting.h @@ -16,12 +16,12 @@ namespace ui { // Simple call to return a byte quantity as a string in human-readable format. // Ex: FormatBytes(512) => "512 B" // Ex: FormatBytes(101479) => "99.1 kB" -UI_EXPORT string16 FormatBytes(int64 bytes); +UI_EXPORT base::string16 FormatBytes(int64 bytes); // Simple call to return a speed as a string in human-readable format. // Ex: FormatSpeed(512) => "512 B/s" // Ex: FormatSpeed(101479) => "99.1 kB/s" -UI_EXPORT string16 FormatSpeed(int64 bytes); +UI_EXPORT base::string16 FormatSpeed(int64 bytes); // Less-Simple API ------------------------------------------------------------- @@ -43,13 +43,16 @@ UI_EXPORT DataUnits GetByteDisplayUnits(int64 bytes); // unit suffix. Specify in the |units| argument the units to be used. // Ex: FormatBytes(512, DATA_UNITS_KIBIBYTE, true) => "0.5 kB" // Ex: FormatBytes(10*1024, DATA_UNITS_MEBIBYTE, false) => "0.1" -UI_EXPORT string16 FormatBytesWithUnits(int64 bytes, DataUnits units, - bool show_units); +UI_EXPORT base::string16 FormatBytesWithUnits(int64 bytes, + DataUnits units, + bool show_units); // As above, but with "/s" units for speed values. // Ex: FormatSpeed(512, DATA_UNITS_KIBIBYTE, true) => "0.5 kB/s" // Ex: FormatSpeed(10*1024, DATA_UNITS_MEBIBYTE, false) => "0.1" -string16 FormatSpeedWithUnits(int64 bytes, DataUnits units, bool show_units); +base::string16 FormatSpeedWithUnits(int64 bytes, + DataUnits units, + bool show_units); } // namespace ui diff --git a/ui/base/ui_base_paths.cc b/ui/base/ui_base_paths.cc index ae1f3fff26..ee7566ef43 100644 --- a/ui/base/ui_base_paths.cc +++ b/ui/base/ui_base_paths.cc @@ -63,7 +63,7 @@ bool PathProvider(int key, base::FilePath* result) { } if (create_dir && !base::PathExists(cur) && - !file_util::CreateDirectory(cur)) + !base::CreateDirectory(cur)) return false; *result = cur; diff --git a/ui/base/x/root_window_property_watcher_x.h b/ui/base/x/root_window_property_watcher_x.h index 2d542d687e..76090162f7 100644 --- a/ui/base/x/root_window_property_watcher_x.h +++ b/ui/base/x/root_window_property_watcher_x.h @@ -9,12 +9,10 @@ #include "base/basictypes.h" #include "ui/base/gtk/gtk_signal.h" -#include "ui/base/ui_export.h" template <typename T> struct DefaultSingletonTraits; namespace ui { - namespace internal { // This class keeps track of changes to properties on the root window. This is @@ -38,7 +36,6 @@ class RootWindowPropertyWatcherX { }; } // namespace internal - } // namespace ui #endif // UI_BASE_X_ROOT_WINDOW_PROPERTY_WATCHER_X_H_ diff --git a/ui/base/x/x11_util.cc b/ui/base/x/x11_util.cc index 6650e31fba..dfecc6cd8a 100644 --- a/ui/base/x/x11_util.cc +++ b/ui/base/x/x11_util.cc @@ -444,7 +444,7 @@ int CoalescePendingMotionEvents(const XEvent* xev, XDisplay* display = xev->xany.display; int event_type = xev->xgeneric.evtype; - DCHECK_EQ(event_type, XI_Motion); + DCHECK(event_type == XI_Motion || event_type == XI_TouchUpdate); while (XPending(display)) { XEvent next_event; @@ -474,6 +474,7 @@ int CoalescePendingMotionEvents(const XEvent* xev, // and that no buttons or modifiers have changed. if (xievent->event == next_xievent->event && xievent->child == next_xievent->child && + xievent->detail == next_xievent->detail && xievent->buttons.mask_len == next_xievent->buttons.mask_len && (memcmp(xievent->buttons.mask, next_xievent->buttons.mask, @@ -498,7 +499,7 @@ int CoalescePendingMotionEvents(const XEvent* xev, break; } - if (num_coalesced > 0) { + if (event_type == XI_Motion && num_coalesced > 0) { base::TimeDelta delta = ui::EventTimeFromNative(last_event) - ui::EventTimeFromNative(const_cast<XEvent*>(xev)); UMA_HISTOGRAM_COUNTS_10000("Event.CoalescedCount.Mouse", num_coalesced); diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc index b4ad3ef98a..76e09c4566 100644 --- a/ui/compositor/compositor.cc +++ b/ui/compositor/compositor.cc @@ -12,11 +12,13 @@ #include "base/debug/trace_event.h" #include "base/memory/singleton.h" #include "base/message_loop/message_loop.h" +#include "base/metrics/histogram.h" #include "base/run_loop.h" #include "base/strings/string_util.h" #include "base/sys_info.h" #include "base/threading/thread.h" #include "base/threading/thread_restrictions.h" +#include "cc/base/latency_info_swap_promise.h" #include "cc/base/switches.h" #include "cc/input/input_handler.h" #include "cc/layers/layer.h" @@ -91,7 +93,7 @@ Texture::~Texture() { } std::string Texture::Produce() { - return EmptyString(); + return std::string(); } CompositorLock::CompositorLock(Compositor* compositor) @@ -270,6 +272,8 @@ Compositor::Compositor(gfx::AcceleratedWidget widget) command_line->HasSwitch(cc::switches::kUIShowCompositedLayerBorders); settings.initial_debug_state.show_fps_counter = command_line->HasSwitch(cc::switches::kUIShowFPSCounter); + settings.initial_debug_state.show_layer_animation_bounds_rects = + command_line->HasSwitch(cc::switches::kUIShowLayerAnimationBounds); settings.initial_debug_state.show_paint_rects = command_line->HasSwitch(switches::kUIShowPaintRects); settings.initial_debug_state.show_property_changed_rects = @@ -285,12 +289,15 @@ Compositor::Compositor(gfx::AcceleratedWidget widget) settings.initial_debug_state.show_non_occluding_rects = command_line->HasSwitch(cc::switches::kUIShowNonOccludingRects); + base::TimeTicks before_create = base::TimeTicks::Now(); if (!!g_compositor_thread) { host_ = cc::LayerTreeHost::CreateThreaded( this, NULL, settings, g_compositor_thread->message_loop_proxy()); } else { host_ = cc::LayerTreeHost::CreateSingleThreaded(this, this, NULL, settings); } + UMA_HISTOGRAM_TIMES("GPU.CreateBrowserCompositor", + base::TimeTicks::Now() - before_create); host_->SetRootLayer(root_web_layer_); host_->SetLayerTreeHostClientReady(); } @@ -437,7 +444,9 @@ void Compositor::ScheduleRedrawRect(const gfx::Rect& damage_rect) { } void Compositor::SetLatencyInfo(const ui::LatencyInfo& latency_info) { - host_->SetLatencyInfo(latency_info); + scoped_ptr<cc::SwapPromise> swap_promise( + new cc::LatencyInfoSwapPromise(latency_info)); + host_->QueueSwapPromise(swap_promise.Pass()); } bool Compositor::ReadPixels(SkBitmap* bitmap, @@ -505,7 +514,7 @@ void Compositor::Layout() { } scoped_ptr<cc::OutputSurface> Compositor::CreateOutputSurface(bool fallback) { - return ContextFactory::GetInstance()->CreateOutputSurface(this); + return ContextFactory::GetInstance()->CreateOutputSurface(this, fallback); } void Compositor::DidCommit() { diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h index 7dabd53416..f5f293912b 100644 --- a/ui/compositor/compositor.h +++ b/ui/compositor/compositor.h @@ -19,9 +19,7 @@ #include "ui/compositor/compositor_observer.h" #include "ui/gfx/native_widget_types.h" #include "ui/gfx/size.h" -#include "ui/gfx/transform.h" #include "ui/gfx/vector2d.h" -#include "ui/gl/gl_share_group.h" class SkBitmap; @@ -30,6 +28,10 @@ class MessageLoopProxy; class RunLoop; } +namespace blink { +class WebGraphicsContext3D; +} + namespace cc { class ContextProvider; class Layer; @@ -38,30 +40,13 @@ class LayerTreeHost; } namespace gfx { -class GLContext; -class GLSurface; -class GLShareGroup; -class Point; class Rect; class Size; } -namespace blink { -class WebGraphicsContext3D; -} - -namespace webkit { -namespace gpu { -class ContextProviderInProcess; -class WebGraphicsContext3DInProcessCommandBufferImpl; -} -} - namespace ui { class Compositor; -class CompositorObserver; -class ContextProviderFromContextFactory; class Layer; class PostedSwapQueue; class Reflector; @@ -86,7 +71,7 @@ class COMPOSITOR_EXPORT ContextFactory { // per-compositor data (e.g. a shared context), that needs to be cleaned up // by calling RemoveCompositor when the compositor gets destroyed. virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface( - Compositor* compositor) = 0; + Compositor* compositor, bool software_fallback) = 0; // Creates a reflector that copies the content of the |mirrored_compositor| // onto |mirroing_layer|. @@ -179,7 +164,7 @@ class COMPOSITOR_EXPORT CompositorLock // This is only to be used for test. It allows execution of other tasks on // the current message loop before the current task finishs (there is a // potential for re-entrancy). -class COMPOSITOR_EXPORT DrawWaiterForTest : public ui::CompositorObserver { +class COMPOSITOR_EXPORT DrawWaiterForTest : public CompositorObserver { public: // Waits for a draw to be issued by the compositor. If the test times out // here, there may be a logic error in the compositor code causing it @@ -264,7 +249,7 @@ class COMPOSITOR_EXPORT Compositor // from changes to layer properties. void ScheduleRedrawRect(const gfx::Rect& damage_rect); - void SetLatencyInfo(const ui::LatencyInfo& latency_info); + void SetLatencyInfo(const LatencyInfo& latency_info); // Reads the region |bounds_in_pixel| of the contents of the last rendered // frame into the given bitmap. diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc index a0858a6cca..91857ba800 100644 --- a/ui/compositor/layer.cc +++ b/ui/compositor/layer.cc @@ -57,8 +57,6 @@ Layer::Layer() layer_brightness_(0.0f), layer_grayscale_(0.0f), layer_inverted_(false), - layer_mask_(NULL), - layer_mask_back_link_(NULL), zoom_(1), zoom_inset_(0), delegate_(NULL), @@ -81,8 +79,6 @@ Layer::Layer(LayerType type) layer_brightness_(0.0f), layer_grayscale_(0.0f), layer_inverted_(false), - layer_mask_(NULL), - layer_mask_back_link_(NULL), zoom_(1), zoom_inset_(0), delegate_(NULL), @@ -101,12 +97,10 @@ Layer::~Layer() { animator_ = NULL; if (compositor_) compositor_->SetRootLayer(NULL); + if (layer_mask_.get()) + SetMaskLayer(scoped_ptr<Layer>()); if (parent_) parent_->Remove(this); - if (layer_mask_) - SetMaskLayer(NULL); - if (layer_mask_back_link_) - layer_mask_back_link_->SetMaskLayer(NULL); for (size_t i = 0; i < children_.size(); ++i) children_[i]->parent_ = NULL; cc_layer_->RemoveLayerAnimationEventObserver(this); @@ -281,28 +275,18 @@ void Layer::SetLayerInverted(bool inverted) { SetLayerFilters(); } -void Layer::SetMaskLayer(Layer* layer_mask) { +void Layer::SetMaskLayer(scoped_ptr<Layer> layer_mask) { // The provided mask should not have a layer mask itself. - DCHECK(!layer_mask || + DCHECK(!layer_mask.get() || (!layer_mask->layer_mask_layer() && - layer_mask->children().empty() && - !layer_mask->layer_mask_back_link_)); - DCHECK(!layer_mask_back_link_); - if (layer_mask_ == layer_mask) + layer_mask->children().empty())); + if (layer_mask_.get() == layer_mask.get()) return; - // We need to de-reference the currently linked object so that no problem - // arises if the mask layer gets deleted before this object. - if (layer_mask_) - layer_mask_->layer_mask_back_link_ = NULL; - layer_mask_ = layer_mask; + layer_mask_ = layer_mask.Pass(); cc_layer_->SetMaskLayer( - layer_mask ? layer_mask->cc_layer() : NULL); - // We need to reference the linked object so that it can properly break the - // link to us when it gets deleted. - if (layer_mask) { - layer_mask->layer_mask_back_link_ = this; - layer_mask->OnDeviceScaleFactorChanged(device_scale_factor_); - } + layer_mask_.get() ? layer_mask_->cc_layer() : NULL); + if (layer_mask_.get()) + layer_mask_->OnDeviceScaleFactorChanged(device_scale_factor_); } void Layer::SetBackgroundZoom(float zoom, int inset) { @@ -528,7 +512,7 @@ void Layer::SetShowDelegatedContent(cc::DelegatedFrameProvider* frame_provider, DCHECK_EQ(type_, LAYER_TEXTURED); scoped_refptr<cc::DelegatedRendererLayer> new_layer = - cc::DelegatedRendererLayer::Create(NULL, frame_provider); + cc::DelegatedRendererLayer::Create(frame_provider); SwitchToLayer(new_layer); delegated_renderer_layer_ = new_layer; layer_updated_externally_ = true; @@ -667,6 +651,11 @@ std::string Layer::DebugName() { return name_; } +scoped_refptr<base::debug::ConvertableToTraceFormat> Layer::TakeDebugInfo() { + // TODO: return something useful here. + return NULL; +} + void Layer::OnAnimationStarted(const cc::AnimationEvent& event) { if (animator_.get()) animator_->OnThreadedAnimationStarted(event); diff --git a/ui/compositor/layer.h b/ui/compositor/layer.h index 4faab1228f..9ddeb56626 100644 --- a/ui/compositor/layer.h +++ b/ui/compositor/layer.h @@ -198,11 +198,10 @@ class COMPOSITOR_EXPORT Layer // Set a layer mask for a layer. // Note the provided layer mask can neither have a layer mask itself nor can - // it have any children. The ownership of |layer_mask| will not be - // transferred with this call. + // it have any children. // Furthermore: A mask layer can only be set to one layer. - void SetMaskLayer(Layer* layer_mask); - Layer* layer_mask_layer() { return layer_mask_; } + void SetMaskLayer(scoped_ptr<Layer> layer_mask); + Layer* layer_mask_layer() { return layer_mask_.get(); } // Sets the visibility of the Layer. A Layer may be visible but not // drawn. This happens if any ancestor of a Layer is not visible. @@ -287,6 +286,8 @@ class COMPOSITOR_EXPORT Layer // |compostior_| to repaint the content. void SendDamagedRects(); + const SkRegion& damaged_region() const { return damaged_region_; } + // Suppresses painting the content by disgarding damaged region and ignoring // new paint requests. void SuppressPaint(); @@ -336,6 +337,9 @@ class COMPOSITOR_EXPORT Layer // LayerClient virtual std::string DebugName() OVERRIDE; + virtual scoped_refptr<base::debug::ConvertableToTraceFormat> + TakeDebugInfo() OVERRIDE; + // LayerAnimationEventObserver virtual void OnAnimationStarted(const cc::AnimationEvent& event) OVERRIDE; @@ -444,12 +448,8 @@ class COMPOSITOR_EXPORT Layer float layer_grayscale_; bool layer_inverted_; - // The associated mask layer with this layer. - Layer* layer_mask_; - // The back link from the mask layer to it's associated masked layer. - // We keep this reference for the case that if the mask layer gets deleted - // while attached to the main layer before the main layer is deleted. - Layer* layer_mask_back_link_; + // The mask layer associated with this layer. + scoped_ptr<Layer> layer_mask_; // The zoom factor to scale the layer by. Zooming is disabled when this is // set to 1. diff --git a/ui/compositor/layer_animator.cc b/ui/compositor/layer_animator.cc index dd727a6c54..0fad04a2cd 100644 --- a/ui/compositor/layer_animator.cc +++ b/ui/compositor/layer_animator.cc @@ -55,6 +55,7 @@ gfx::AnimationContainer* GetAnimationContainer() { LayerAnimator::LayerAnimator(base::TimeDelta transition_duration) : delegate_(NULL), preemption_strategy_(IMMEDIATELY_SET_NEW_TARGET), + is_transition_duration_locked_(false), transition_duration_(transition_duration), tween_type_(gfx::Tween::LINEAR), is_started_(false), @@ -118,6 +119,10 @@ ANIMATED_PROPERTY(float, BRIGHTNESS, Brightness, float, brightness); ANIMATED_PROPERTY(float, GRAYSCALE, Grayscale, float, grayscale); ANIMATED_PROPERTY(SkColor, COLOR, Color, SkColor, color); +base::TimeDelta LayerAnimator::GetTransitionDuration() const { + return transition_duration_; +} + void LayerAnimator::SetDelegate(LayerAnimationDelegate* delegate) { delegate_ = delegate; } @@ -810,8 +815,10 @@ void LayerAnimator::OnScheduled(LayerAnimationSequence* sequence) { sequence->OnScheduled(); } -base::TimeDelta LayerAnimator::GetTransitionDuration() const { - return transition_duration_; +void LayerAnimator::SetTransitionDuration(base::TimeDelta duration) { + if (is_transition_duration_locked_) + return; + transition_duration_ = duration; } void LayerAnimator::ClearAnimationsInternal() { diff --git a/ui/compositor/layer_animator.h b/ui/compositor/layer_animator.h index 5fe0d5c189..ad3754de15 100644 --- a/ui/compositor/layer_animator.h +++ b/ui/compositor/layer_animator.h @@ -88,6 +88,10 @@ class COMPOSITOR_EXPORT LayerAnimator virtual void SetColor(SkColor color); SkColor GetTargetColor() const; + // Returns the default length of animations, including adjustment for slow + // animation mode if set. + base::TimeDelta GetTransitionDuration() const; + // Sets the layer animation delegate the animator is associated with. The // animator does not own the delegate. The layer animator expects a non-NULL // delegate for most of its operations, so do not call any methods without @@ -294,9 +298,8 @@ class COMPOSITOR_EXPORT LayerAnimator // starting the animation or adding to the queue. void OnScheduled(LayerAnimationSequence* sequence); - // Returns the default length of animations, including adjustment for slow - // animation mode if set. - base::TimeDelta GetTransitionDuration() const; + // Sets |transition_duration_| unless |is_transition_duration_locked_| is set. + void SetTransitionDuration(base::TimeDelta duration); // Clears the animation queues and notifies any running animations that they // have been aborted. @@ -317,6 +320,10 @@ class COMPOSITOR_EXPORT LayerAnimator // Determines how animations are replaced. PreemptionStrategy preemption_strategy_; + // Whether the length of animations is locked. While it is locked + // SetTransitionDuration does not set |transition_duration_|. + bool is_transition_duration_locked_; + // The default length of animations. base::TimeDelta transition_duration_; diff --git a/ui/compositor/layer_unittest.cc b/ui/compositor/layer_unittest.cc index 2d94d35d46..62e4507a04 100644 --- a/ui/compositor/layer_unittest.cc +++ b/ui/compositor/layer_unittest.cc @@ -180,9 +180,8 @@ class TestLayerDelegate : public LayerDelegate { // Overridden from LayerDelegate: virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE { - SkIRect clip_bounds; - canvas->sk_canvas()->getClipDeviceBounds(&clip_bounds); - paint_size_ = gfx::Size(clip_bounds.width(), clip_bounds.height()); + gfx::ImageSkiaRep contents = canvas->ExtractImageRep(); + paint_size_ = gfx::Size(contents.pixel_width(), contents.pixel_height()); canvas->FillRect(gfx::Rect(paint_size_), colors_[color_index_]); color_index_ = (color_index_ + 1) % static_cast<int>(colors_.size()); const SkMatrix& matrix = canvas->sk_canvas()->getTotalMatrix(); diff --git a/ui/compositor/scoped_layer_animation_settings.cc b/ui/compositor/scoped_layer_animation_settings.cc index b5bad673f6..84456ee5bc 100644 --- a/ui/compositor/scoped_layer_animation_settings.cc +++ b/ui/compositor/scoped_layer_animation_settings.cc @@ -81,7 +81,9 @@ class InvertingObserver : public ImplicitAnimationObserver { ScopedLayerAnimationSettings::ScopedLayerAnimationSettings( LayerAnimator* animator) : animator_(animator), - old_transition_duration_(animator->transition_duration_), + old_is_transition_duration_locked_( + animator->is_transition_duration_locked_), + old_transition_duration_(animator->GetTransitionDuration()), old_tween_type_(animator->tween_type()), old_preemption_strategy_(animator->preemption_strategy()), inverse_observer_(new InvertingObserver()) { @@ -90,7 +92,9 @@ ScopedLayerAnimationSettings::ScopedLayerAnimationSettings( } ScopedLayerAnimationSettings::~ScopedLayerAnimationSettings() { - animator_->transition_duration_ = old_transition_duration_; + animator_->is_transition_duration_locked_ = + old_is_transition_duration_locked_; + animator_->SetTransitionDuration(old_transition_duration_); animator_->set_tween_type(old_tween_type_); animator_->set_preemption_strategy(old_preemption_strategy_); @@ -113,11 +117,15 @@ void ScopedLayerAnimationSettings::AddObserver( void ScopedLayerAnimationSettings::SetTransitionDuration( base::TimeDelta duration) { - animator_->transition_duration_ = duration; + animator_->SetTransitionDuration(duration); +} + +void ScopedLayerAnimationSettings::LockTransitionDuration() { + animator_->is_transition_duration_locked_ = true; } base::TimeDelta ScopedLayerAnimationSettings::GetTransitionDuration() const { - return animator_->transition_duration_; + return animator_->GetTransitionDuration(); } void ScopedLayerAnimationSettings::SetTweenType(gfx::Tween::Type tween_type) { diff --git a/ui/compositor/scoped_layer_animation_settings.h b/ui/compositor/scoped_layer_animation_settings.h index e36b853272..e8a1b468ba 100644 --- a/ui/compositor/scoped_layer_animation_settings.h +++ b/ui/compositor/scoped_layer_animation_settings.h @@ -34,6 +34,12 @@ class COMPOSITOR_EXPORT ScopedLayerAnimationSettings { void SetTransitionDuration(base::TimeDelta duration); base::TimeDelta GetTransitionDuration() const; + // Locks transition duration in |animator_|. When transition duration + // is locked any subsequent changes to it are ignored until the + // ScopedLayerAnimationSettings object that has locked the duration goes out + // of scope. + void LockTransitionDuration(); + void SetTweenType(gfx::Tween::Type tween_type); gfx::Tween::Type GetTweenType() const; @@ -50,6 +56,7 @@ class COMPOSITOR_EXPORT ScopedLayerAnimationSettings { private: LayerAnimator* animator_; + bool old_is_transition_duration_locked_; base::TimeDelta old_transition_duration_; gfx::Tween::Type old_tween_type_; LayerAnimator::PreemptionStrategy old_preemption_strategy_; diff --git a/ui/compositor/test/default_context_factory.cc b/ui/compositor/test/default_context_factory.cc index f5601c9c02..4839e1f19a 100644 --- a/ui/compositor/test/default_context_factory.cc +++ b/ui/compositor/test/default_context_factory.cc @@ -30,7 +30,8 @@ bool DefaultContextFactory::Initialize() { } scoped_ptr<cc::OutputSurface> DefaultContextFactory::CreateOutputSurface( - Compositor* compositor) { + Compositor* compositor, bool software_fallback) { + DCHECK(!software_fallback); blink::WebGraphicsContext3D::Attributes attrs; attrs.depth = false; attrs.stencil = false; diff --git a/ui/compositor/test/default_context_factory.h b/ui/compositor/test/default_context_factory.h index b89bdd80ee..7b8501bf82 100644 --- a/ui/compositor/test/default_context_factory.h +++ b/ui/compositor/test/default_context_factory.h @@ -23,7 +23,7 @@ class DefaultContextFactory : public ContextFactory { // ContextFactory implementation virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface( - Compositor* compositor) OVERRIDE; + Compositor* compositor, bool software_fallback) OVERRIDE; virtual scoped_refptr<Reflector> CreateReflector( Compositor* compositor, diff --git a/ui/compositor/test/test_context_factory.cc b/ui/compositor/test/test_context_factory.cc index d47dec9399..0c4b274f53 100644 --- a/ui/compositor/test/test_context_factory.cc +++ b/ui/compositor/test/test_context_factory.cc @@ -15,7 +15,8 @@ TestContextFactory::TestContextFactory() {} TestContextFactory::~TestContextFactory() {} scoped_ptr<cc::OutputSurface> TestContextFactory::CreateOutputSurface( - Compositor* compositor) { + Compositor* compositor, bool software_fallback) { + DCHECK(!software_fallback); return make_scoped_ptr( new cc::OutputSurface(cc::TestContextProvider::Create())); } diff --git a/ui/compositor/test/test_context_factory.h b/ui/compositor/test/test_context_factory.h index d419292110..9b4bd9dc81 100644 --- a/ui/compositor/test/test_context_factory.h +++ b/ui/compositor/test/test_context_factory.h @@ -19,7 +19,7 @@ class TestContextFactory : public ContextFactory { // ContextFactory implementation virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface( - Compositor* compositor) OVERRIDE; + Compositor* compositor, bool software_fallback) OVERRIDE; virtual scoped_refptr<Reflector> CreateReflector( Compositor* mirrored_compositor, diff --git a/ui/events/cocoa/events_mac.mm b/ui/events/cocoa/events_mac.mm index da08510a92..ffc34d7f2a 100644 --- a/ui/events/cocoa/events_mac.mm +++ b/ui/events/cocoa/events_mac.mm @@ -141,6 +141,10 @@ KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) { return ui::KeyboardCodeFromNSEvent(native_event); } +std::string CodeFromNative(const base::NativeEvent& native_event) { + return ui::CodeFromNSEvent(native_event); +} + bool IsMouseEvent(const base::NativeEvent& native_event) { EventType type = EventTypeFromNative(native_event); return type == ET_MOUSE_PRESSED || diff --git a/ui/events/dom4_keycode_converter.target.darwin-arm.mk b/ui/events/dom4_keycode_converter.target.darwin-arm.mk index 22e9a5dde0..819f6318c0 100644 --- a/ui/events/dom4_keycode_converter.target.darwin-arm.mk +++ b/ui/events/dom4_keycode_converter.target.darwin-arm.mk @@ -61,6 +61,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -70,9 +71,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -142,6 +145,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -151,9 +155,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/events/dom4_keycode_converter.target.darwin-mips.mk b/ui/events/dom4_keycode_converter.target.darwin-mips.mk index c9d1b7394a..b0052c16fb 100644 --- a/ui/events/dom4_keycode_converter.target.darwin-mips.mk +++ b/ui/events/dom4_keycode_converter.target.darwin-mips.mk @@ -60,6 +60,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -69,9 +70,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -140,6 +143,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -149,9 +153,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/events/dom4_keycode_converter.target.darwin-x86.mk b/ui/events/dom4_keycode_converter.target.darwin-x86.mk index 07ed16efae..0ec9a1d4e7 100644 --- a/ui/events/dom4_keycode_converter.target.darwin-x86.mk +++ b/ui/events/dom4_keycode_converter.target.darwin-x86.mk @@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -72,9 +73,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -147,6 +150,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -156,9 +160,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/events/dom4_keycode_converter.target.linux-arm.mk b/ui/events/dom4_keycode_converter.target.linux-arm.mk index 22e9a5dde0..819f6318c0 100644 --- a/ui/events/dom4_keycode_converter.target.linux-arm.mk +++ b/ui/events/dom4_keycode_converter.target.linux-arm.mk @@ -61,6 +61,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -70,9 +71,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -142,6 +145,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -151,9 +155,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/events/dom4_keycode_converter.target.linux-mips.mk b/ui/events/dom4_keycode_converter.target.linux-mips.mk index c9d1b7394a..b0052c16fb 100644 --- a/ui/events/dom4_keycode_converter.target.linux-mips.mk +++ b/ui/events/dom4_keycode_converter.target.linux-mips.mk @@ -60,6 +60,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -69,9 +70,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -140,6 +143,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -149,9 +153,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/events/dom4_keycode_converter.target.linux-x86.mk b/ui/events/dom4_keycode_converter.target.linux-x86.mk index 07ed16efae..0ec9a1d4e7 100644 --- a/ui/events/dom4_keycode_converter.target.linux-x86.mk +++ b/ui/events/dom4_keycode_converter.target.linux-x86.mk @@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -72,9 +73,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -147,6 +150,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -156,9 +160,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/events/event.cc b/ui/events/event.cc index 5c25306215..ae1391a60c 100644 --- a/ui/events/event.cc +++ b/ui/events/event.cc @@ -22,6 +22,8 @@ #if defined(USE_X11) #include "ui/events/keycodes/keyboard_code_conversion_x.h" +#elif defined(USE_OZONE) +#include "ui/events/keycodes/keyboard_code_conversion.h" #endif namespace { @@ -513,6 +515,7 @@ KeyEvent::KeyEvent(const base::NativeEvent& native_event, bool is_char) EventTypeFromNative(native_event), EventFlagsFromNative(native_event)), key_code_(KeyboardCodeFromNative(native_event)), + code_(CodeFromNative(native_event)), is_char_(is_char), character_(0) { #if defined(USE_X11) @@ -530,6 +533,18 @@ KeyEvent::KeyEvent(EventType type, character_(GetCharacterFromKeyCode(key_code, flags)) { } +KeyEvent::KeyEvent(EventType type, + KeyboardCode key_code, + const std::string& code, + int flags, + bool is_char) + : Event(type, EventTimeForNow(), flags), + key_code_(key_code), + code_(code), + is_char_(is_char), + character_(GetCharacterFromKeyCode(key_code, flags)) { +} + uint16 KeyEvent::GetCharacter() const { if (character_) return character_; @@ -549,23 +564,13 @@ uint16 KeyEvent::GetCharacter() const { ch = GetCharacterFromXEvent(native_event()); return ch ? ch : GetCharacterFromKeyCode(key_code_, flags()); #else - NOTIMPLEMENTED(); - return 0; -#endif -} + if (native_event()) { + DCHECK(EventTypeFromNative(native_event()) == ET_KEY_PRESSED || + EventTypeFromNative(native_event()) == ET_KEY_RELEASED); + } -KeyEvent* KeyEvent::Copy() const { -#if defined(USE_OZONE) - KeyEvent* copy = new KeyEvent(*this); -#else - KeyEvent* copy = HasNativeEvent() ? - new KeyEvent(::CopyNativeEvent(native_event()), is_char()) : - new KeyEvent(*this); -#endif -#if defined(USE_X11) - copy->set_delete_native_event(true); + return GetCharacterFromKeyCode(key_code_, flags()); #endif - return copy; } bool KeyEvent::IsUnicodeKeyCode() const { diff --git a/ui/events/event.h b/ui/events/event.h index 71c8f6712a..5f90b820af 100644 --- a/ui/events/event.h +++ b/ui/events/event.h @@ -514,6 +514,11 @@ class EVENTS_EXPORT KeyEvent : public Event { // Used for synthetic events. KeyEvent(EventType type, KeyboardCode key_code, int flags, bool is_char); + // Used for synthetic events with code of DOM KeyboardEvent (e.g. 'KeyA') + // See also: ui/events/keycodes/dom4/keycode_converter_data.h + KeyEvent(EventType type, KeyboardCode key_code, const std::string& code, + int flags, bool is_char); + // This allows an I18N virtual keyboard to fabricate a keyboard event that // does not have a corresponding KeyboardCode (example: U+00E1 Latin small // letter A with acute, U+0410 Cyrillic capital letter A). @@ -523,9 +528,6 @@ class EVENTS_EXPORT KeyEvent : public Event { // BMP characters. uint16 GetCharacter() const; - // Returns the copy of this key event. Used in NativeWebKeyboardEvent. - KeyEvent* Copy() const; - KeyboardCode key_code() const { return key_code_; } bool is_char() const { return is_char_; } @@ -538,6 +540,8 @@ class EVENTS_EXPORT KeyEvent : public Event { // TODO(msw): Additional work may be needed for analogues on other platforms. bool IsUnicodeKeyCode() const; + std::string code() const { return code_; } + // Normalizes flags_ to make it Windows/Mac compatible. Since the way // of setting modifier mask on X is very different than Windows/Mac as shown // in http://crbug.com/127142#c8, the normalization is necessary. @@ -545,6 +549,14 @@ class EVENTS_EXPORT KeyEvent : public Event { private: KeyboardCode key_code_; + + // String of 'code' defined in DOM KeyboardEvent (e.g. 'KeyA', 'Space') + // http://www.w3.org/TR/uievents/#keyboard-key-codes. + // + // This value represents the physical position in the keyboard and can be + // converted from / to keyboard scan code like XKB. + std::string code_; + // True if this is a translated character event (vs. a raw key down). Both // share the same type: ET_KEY_PRESSED. bool is_char_; diff --git a/ui/events/event_dispatcher.cc b/ui/events/event_dispatcher.cc index d43ce39a37..1c11ef9fe5 100644 --- a/ui/events/event_dispatcher.cc +++ b/ui/events/event_dispatcher.cc @@ -6,6 +6,9 @@ #include <algorithm> +#include "ui/events/event_target.h" +#include "ui/events/event_targeter.h" + namespace ui { namespace { @@ -42,6 +45,29 @@ Event* EventDispatcherDelegate::current_event() { EventDispatchDetails EventDispatcherDelegate::DispatchEvent(EventTarget* target, Event* event) { + CHECK(target); + EventDispatchDetails details = PreDispatchEvent(target, event); + if (!details.dispatcher_destroyed) + details = DispatchEventToTarget(target, event); + if (!details.dispatcher_destroyed) + details = PostDispatchEvent(target, *event); + + return details; +} + +EventDispatchDetails EventDispatcherDelegate::PreDispatchEvent( + EventTarget* target, Event* event) { + return EventDispatchDetails(); +} + +EventDispatchDetails EventDispatcherDelegate::PostDispatchEvent( + EventTarget* target, const Event& event) { + return EventDispatchDetails(); +} + +EventDispatchDetails EventDispatcherDelegate::DispatchEventToTarget( + EventTarget* target, + Event* event) { EventDispatcher* old_dispatcher = dispatcher_; EventDispatcher dispatcher(this); dispatcher_ = &dispatcher; @@ -54,6 +80,9 @@ EventDispatchDetails EventDispatcherDelegate::DispatchEvent(EventTarget* target, return dispatcher.details(); } +//////////////////////////////////////////////////////////////////////////////// +// EventDispatcher: + EventDispatcher::EventDispatcher(EventDispatcherDelegate* delegate) : delegate_(delegate), current_event_(NULL) { diff --git a/ui/events/event_dispatcher.h b/ui/events/event_dispatcher.h index c7a7dec712..9f3a450e76 100644 --- a/ui/events/event_dispatcher.h +++ b/ui/events/event_dispatcher.h @@ -8,12 +8,14 @@ #include "base/auto_reset.h" #include "ui/events/event.h" #include "ui/events/event_constants.h" -#include "ui/events/event_target.h" +#include "ui/events/event_handler.h" #include "ui/events/events_export.h" namespace ui { class EventDispatcher; +class EventTarget; +class EventTargeter; struct EventDispatchDetails { EventDispatchDetails() @@ -37,14 +39,30 @@ class EVENTS_EXPORT EventDispatcherDelegate { // dispatched). Event* current_event(); - protected: - // Dispatches the event to the target. Returns true if the delegate is still - // alive after dispatching event, and false if the delegate was destroyed - // during the event dispatch. + // Dispatches |event| to |target|. This calls |PreDispatchEvent()| before + // dispatching the event, and |PostDispatchEvent()| after the event has been + // dispatched. EventDispatchDetails DispatchEvent(EventTarget* target, Event* event) WARN_UNUSED_RESULT; + protected: + // This is called once a target has been determined for an event, right before + // the event is dispatched to the target. This function may modify |event| to + // prepare it for dispatch (e.g. update event flags, location etc.). + virtual EventDispatchDetails PreDispatchEvent( + EventTarget* target, + Event* event) WARN_UNUSED_RESULT; + + // This is called right after the event dispatch is completed. + virtual EventDispatchDetails PostDispatchEvent( + EventTarget* target, + const Event& event) WARN_UNUSED_RESULT; + private: + // Dispatches the event to the target. + EventDispatchDetails DispatchEventToTarget(EventTarget* target, + Event* event) WARN_UNUSED_RESULT; + EventDispatcher* dispatcher_; DISALLOW_COPY_AND_ASSIGN(EventDispatcherDelegate); diff --git a/ui/events/event_dispatcher_unittest.cc b/ui/events/event_dispatcher_unittest.cc index 6aae01a52b..30bbd0dd99 100644 --- a/ui/events/event_dispatcher_unittest.cc +++ b/ui/events/event_dispatcher_unittest.cc @@ -6,6 +6,9 @@ #include "testing/gtest/include/gtest/gtest.h" #include "ui/events/event.h" +#include "ui/events/event_dispatcher.h" +#include "ui/events/event_target.h" +#include "ui/events/event_target_iterator.h" #include "ui/events/event_utils.h" namespace ui { @@ -43,6 +46,14 @@ class TestTarget : public EventTarget { return parent_; } + virtual scoped_ptr<EventTargetIterator> GetChildIterator() const OVERRIDE { + return scoped_ptr<EventTargetIterator>(); + } + + virtual EventTargeter* GetEventTargeter() OVERRIDE { + return NULL; + } + TestTarget* parent_; std::vector<int> handler_list_; bool valid_; diff --git a/ui/events/event_processor.cc b/ui/events/event_processor.cc new file mode 100644 index 0000000000..45fa8302ca --- /dev/null +++ b/ui/events/event_processor.cc @@ -0,0 +1,24 @@ +// Copyright 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. + +#include "ui/events/event_processor.h" + +#include "ui/events/event_target.h" +#include "ui/events/event_targeter.h" + +namespace ui { + +EventDispatchDetails EventProcessor::OnEventFromSource(Event* event) { + EventTarget* root = GetRootTarget(); + CHECK(root); + EventTargeter* targeter = root->GetEventTargeter(); + CHECK(targeter); + EventTarget* target = targeter->FindTargetForEvent(root, event); + if (!target) + return EventDispatchDetails(); + + return DispatchEvent(target, event); +} + +} // namespace ui diff --git a/ui/events/event_processor.h b/ui/events/event_processor.h new file mode 100644 index 0000000000..fd9bee3b02 --- /dev/null +++ b/ui/events/event_processor.h @@ -0,0 +1,30 @@ +// Copyright 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. + +#ifndef UI_EVENTS_EVENT_PROCESSOR_H_ +#define UI_EVENTS_EVENT_PROCESSOR_H_ + +#include "ui/events/event_dispatcher.h" +#include "ui/events/event_source.h" + +namespace ui { + +// EventProcessor receives an event from an EventSource and dispatches it to a +// tree of EventTargets. +class EVENTS_EXPORT EventProcessor : public EventDispatcherDelegate { + public: + virtual ~EventProcessor() {} + + // Returns the root of the tree this event processor owns. + virtual EventTarget* GetRootTarget() = 0; + + // Dispatches an event received from the EventSource to the tree of + // EventTargets (whose root is returned by GetRootTarget()). + virtual EventDispatchDetails OnEventFromSource(Event* event) + WARN_UNUSED_RESULT; +}; + +} // namespace ui + +#endif // UI_EVENTS_EVENT_PROCESSOR_H_ diff --git a/ui/events/event_processor_unittest.cc b/ui/events/event_processor_unittest.cc new file mode 100644 index 0000000000..841cdb7503 --- /dev/null +++ b/ui/events/event_processor_unittest.cc @@ -0,0 +1,163 @@ +// 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. + +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/events/event.h" +#include "ui/events/event_targeter.h" +#include "ui/events/test/test_event_processor.h" +#include "ui/events/test/test_event_target.h" + +namespace ui { +namespace test { + +class EventProcessorTest : public testing::Test { + public: + EventProcessorTest() {} + virtual ~EventProcessorTest() {} + + // testing::Test: + virtual void SetUp() OVERRIDE { + processor_.SetRoot(scoped_ptr<EventTarget>(new TestEventTarget())); + root()->SetEventTargeter(make_scoped_ptr(new EventTargeter())); + } + + TestEventTarget* root() { + return static_cast<TestEventTarget*>(processor_.GetRootTarget()); + } + + void DispatchEvent(Event* event) { + processor_.OnEventFromSource(event); + } + + protected: + TestEventProcessor processor_; + + DISALLOW_COPY_AND_ASSIGN(EventProcessorTest); +}; + +TEST_F(EventProcessorTest, Basic) { + scoped_ptr<TestEventTarget> child(new TestEventTarget()); + root()->AddChild(child.Pass()); + + MouseEvent mouse(ET_MOUSE_MOVED, gfx::Point(10, 10), gfx::Point(10, 10), + EF_NONE); + DispatchEvent(&mouse); + EXPECT_TRUE(root()->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); + EXPECT_FALSE(root()->DidReceiveEvent(ET_MOUSE_MOVED)); + + root()->RemoveChild(root()->child_at(0)); + DispatchEvent(&mouse); + EXPECT_TRUE(root()->DidReceiveEvent(ET_MOUSE_MOVED)); +} + +template<typename T> +class BoundsEventTargeter : public EventTargeter { + public: + virtual ~BoundsEventTargeter() {} + + protected: + virtual bool SubtreeShouldBeExploredForEvent( + EventTarget* target, const LocatedEvent& event) OVERRIDE { + T* t = static_cast<T*>(target); + return (t->bounds().Contains(event.location())); + } +}; + +class BoundsTestTarget : public TestEventTarget { + public: + BoundsTestTarget() {} + virtual ~BoundsTestTarget() {} + + void set_bounds(gfx::Rect rect) { bounds_ = rect; } + gfx::Rect bounds() const { return bounds_; } + + static void ConvertPointToTarget(BoundsTestTarget* source, + BoundsTestTarget* target, + gfx::Point* location) { + gfx::Vector2d vector; + if (source->Contains(target)) { + for (; target && target != source; + target = static_cast<BoundsTestTarget*>(target->parent())) { + vector += target->bounds().OffsetFromOrigin(); + } + *location -= vector; + } else if (target->Contains(source)) { + for (; source && source != target; + source = static_cast<BoundsTestTarget*>(source->parent())) { + vector += source->bounds().OffsetFromOrigin(); + } + *location += vector; + } else { + NOTREACHED(); + } + } + + private: + // EventTarget: + virtual void ConvertEventToTarget(EventTarget* target, + LocatedEvent* event) OVERRIDE { + event->ConvertLocationToTarget(this, + static_cast<BoundsTestTarget*>(target)); + } + + gfx::Rect bounds_; + + DISALLOW_COPY_AND_ASSIGN(BoundsTestTarget); +}; + +TEST_F(EventProcessorTest, Bounds) { + scoped_ptr<BoundsTestTarget> parent(new BoundsTestTarget()); + scoped_ptr<BoundsTestTarget> child(new BoundsTestTarget()); + scoped_ptr<BoundsTestTarget> grandchild(new BoundsTestTarget()); + + parent->set_bounds(gfx::Rect(0, 0, 30, 30)); + child->set_bounds(gfx::Rect(5, 5, 20, 20)); + grandchild->set_bounds(gfx::Rect(5, 5, 5, 5)); + + child->AddChild(scoped_ptr<TestEventTarget>(grandchild.Pass())); + parent->AddChild(scoped_ptr<TestEventTarget>(child.Pass())); + root()->AddChild(scoped_ptr<TestEventTarget>(parent.Pass())); + + ASSERT_EQ(1u, root()->child_count()); + ASSERT_EQ(1u, root()->child_at(0)->child_count()); + ASSERT_EQ(1u, root()->child_at(0)->child_at(0)->child_count()); + + TestEventTarget* parent_r = root()->child_at(0); + TestEventTarget* child_r = parent_r->child_at(0); + TestEventTarget* grandchild_r = child_r->child_at(0); + + // Dispatch a mouse event that falls on the parent, but not on the child. When + // the default event-targeter used, the event will still reach |grandchild|, + // because the default targeter does not look at the bounds. + MouseEvent mouse(ET_MOUSE_MOVED, gfx::Point(1, 1), gfx::Point(1, 1), EF_NONE); + DispatchEvent(&mouse); + EXPECT_FALSE(root()->DidReceiveEvent(ET_MOUSE_MOVED)); + EXPECT_FALSE(parent_r->DidReceiveEvent(ET_MOUSE_MOVED)); + EXPECT_FALSE(child_r->DidReceiveEvent(ET_MOUSE_MOVED)); + EXPECT_TRUE(grandchild_r->DidReceiveEvent(ET_MOUSE_MOVED)); + grandchild_r->ResetReceivedEvents(); + + // Now install a targeter on the parent that looks at the bounds and makes + // sure the event reaches the target only if the location of the event within + // the bounds of the target. + parent_r->SetEventTargeter(scoped_ptr<EventTargeter>( + new BoundsEventTargeter<BoundsTestTarget>())); + DispatchEvent(&mouse); + EXPECT_FALSE(root()->DidReceiveEvent(ET_MOUSE_MOVED)); + EXPECT_TRUE(parent_r->DidReceiveEvent(ET_MOUSE_MOVED)); + EXPECT_FALSE(child_r->DidReceiveEvent(ET_MOUSE_MOVED)); + EXPECT_FALSE(grandchild_r->DidReceiveEvent(ET_MOUSE_MOVED)); + parent_r->ResetReceivedEvents(); + + MouseEvent second(ET_MOUSE_MOVED, gfx::Point(12, 12), gfx::Point(12, 12), + EF_NONE); + DispatchEvent(&second); + EXPECT_FALSE(root()->DidReceiveEvent(ET_MOUSE_MOVED)); + EXPECT_FALSE(parent_r->DidReceiveEvent(ET_MOUSE_MOVED)); + EXPECT_FALSE(child_r->DidReceiveEvent(ET_MOUSE_MOVED)); + EXPECT_TRUE(grandchild_r->DidReceiveEvent(ET_MOUSE_MOVED)); +} + +} // namespace test +} // namespace ui diff --git a/ui/events/event_source.cc b/ui/events/event_source.cc new file mode 100644 index 0000000000..4946ea0dfd --- /dev/null +++ b/ui/events/event_source.cc @@ -0,0 +1,19 @@ +// Copyright 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. + +#include "ui/events/event_source.h" + +#include "ui/events/event_processor.h" + +namespace ui { + +void EventSource::SendEventToProcessor(Event* event) { + EventProcessor* processor = GetEventProcessor(); + CHECK(processor); + EventDispatchDetails details = processor->OnEventFromSource(event); + if (details.dispatcher_destroyed) + return; +} + +} // namespace ui diff --git a/ui/events/event_source.h b/ui/events/event_source.h new file mode 100644 index 0000000000..f8da9e6635 --- /dev/null +++ b/ui/events/event_source.h @@ -0,0 +1,29 @@ +// Copyright 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. + +#ifndef UI_EVENTS_EVENT_SOURCE_H_ +#define UI_EVENTS_EVENT_SOURCE_H_ + +#include "ui/events/events_export.h" + +namespace ui { + +class Event; +class EventProcessor; + +// EventSource receives events from the native platform (e.g. X11, win32 etc.) +// and sends the events to an EventProcessor. +class EVENTS_EXPORT EventSource { + public: + virtual ~EventSource() {} + + virtual EventProcessor* GetEventProcessor() = 0; + + protected: + void SendEventToProcessor(Event* event); +}; + +} // namespace ui + +#endif // UI_EVENTS_EVENT_SOURCE_H_ diff --git a/ui/events/event_target.cc b/ui/events/event_target.cc index 56b7a1639f..9b44f9a74a 100644 --- a/ui/events/event_target.cc +++ b/ui/events/event_target.cc @@ -18,6 +18,10 @@ EventTarget::EventTarget() EventTarget::~EventTarget() { } +void EventTarget::ConvertEventToTarget(EventTarget* target, + LocatedEvent* event) { +} + void EventTarget::AddPreTargetHandler(EventHandler* handler) { pre_target_list_.push_back(handler); } diff --git a/ui/events/event_target.h b/ui/events/event_target.h index 936a86d716..fd03667da9 100644 --- a/ui/events/event_target.h +++ b/ui/events/event_target.h @@ -5,19 +5,23 @@ #ifndef UI_EVENTS_EVENT_TARGET_H_ #define UI_EVENTS_EVENT_TARGET_H_ +#include <vector> + #include "base/basictypes.h" #include "base/compiler_specific.h" +#include "base/memory/scoped_ptr.h" #include "ui/events/event_handler.h" #include "ui/events/events_export.h" namespace ui { class EventDispatcher; +class EventTargeter; +class EventTargetIterator; +class LocatedEvent; class EVENTS_EXPORT EventTarget : public EventHandler { public: - typedef std::vector<EventTarget*> EventTargets; - class DispatcherApi { public: explicit DispatcherApi(EventTarget* target) : target_(target) {} @@ -36,9 +40,24 @@ class EVENTS_EXPORT EventTarget : public EventHandler { EventTarget(); virtual ~EventTarget(); - virtual bool CanAcceptEvent(const ui::Event& event) = 0; + virtual bool CanAcceptEvent(const Event& event) = 0; + + // Returns the parent EventTarget in the event-target tree. virtual EventTarget* GetParentTarget() = 0; + // Returns an iterator an EventTargeter can use to iterate over the list of + // child EventTargets. + virtual scoped_ptr<EventTargetIterator> GetChildIterator() const = 0; + + // Returns the EventTargeter that should be used to find the target for an + // event in the subtree rooted at this EventTarget. + virtual EventTargeter* GetEventTargeter() = 0; + + // Updates the states in |event| (e.g. location) to be suitable for |target|, + // so that |event| can be dispatched to |target|. + virtual void ConvertEventToTarget(EventTarget* target, + LocatedEvent* event); + // Adds a handler to receive events before the target. The handler must be // explicitly removed from the target before the handler is destroyed. The // EventTarget does not take ownership of the handler. diff --git a/ui/events/event_target_iterator.h b/ui/events/event_target_iterator.h new file mode 100644 index 0000000000..3083c83077 --- /dev/null +++ b/ui/events/event_target_iterator.h @@ -0,0 +1,48 @@ +// Copyright 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. + +#ifndef UI_EVENTS_EVENT_TARGET_ITERATOR_H_ +#define UI_EVENTS_EVENT_TARGET_ITERATOR_H_ + +#include <vector> + +namespace ui { + +class EventTarget; + +// An interface that allows iterating over a set of EventTargets. +class EventTargetIterator { + public: + virtual ~EventTargetIterator() {} + virtual EventTarget* GetNextTarget() = 0; +}; + +// Provides an EventTargetIterator implementation for iterating over a list of +// EventTargets. The list is iterated in the reverse order, since typically the +// EventTargets are maintained in increasing z-order in the lists. +template<typename T> +class EventTargetIteratorImpl : public EventTargetIterator { + public: + explicit EventTargetIteratorImpl(const std::vector<T*>& children) + : begin_(children.rbegin()), + end_(children.rend()) { + } + virtual ~EventTargetIteratorImpl() {} + + virtual EventTarget* GetNextTarget() OVERRIDE { + if (begin_ == end_) + return NULL; + EventTarget* target = *(begin_); + ++begin_; + return target; + } + + private: + typename std::vector<T*>::const_reverse_iterator begin_; + typename std::vector<T*>::const_reverse_iterator end_; +}; + +} // namespace ui + +#endif // UI_EVENTS_EVENT_TARGET_ITERATOR_H_ diff --git a/ui/events/event_targeter.cc b/ui/events/event_targeter.cc new file mode 100644 index 0000000000..41d4442659 --- /dev/null +++ b/ui/events/event_targeter.cc @@ -0,0 +1,56 @@ +// 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. + +#include "ui/events/event_targeter.h" + +#include "ui/events/event.h" +#include "ui/events/event_target.h" +#include "ui/events/event_target_iterator.h" + +namespace ui { + +EventTargeter::~EventTargeter() { +} + +EventTarget* EventTargeter::FindTargetForEvent(EventTarget* root, + Event* event) { + if (event->IsMouseEvent() || + event->IsScrollEvent() || + event->IsTouchEvent() || + event->IsGestureEvent()) { + return FindTargetForLocatedEvent(root, + static_cast<LocatedEvent*>(event)); + } + return root; +} + +EventTarget* EventTargeter::FindTargetForLocatedEvent(EventTarget* root, + LocatedEvent* event) { + scoped_ptr<EventTargetIterator> iter = root->GetChildIterator(); + if (iter) { + EventTarget* target = root; + EventTarget* child = NULL; + while ((child = iter->GetNextTarget())) { + if (!SubtreeShouldBeExploredForEvent(child, *event)) + continue; + target->ConvertEventToTarget(child, event); + EventTargeter* targeter = child->GetEventTargeter(); + EventTarget* child_target = targeter ? + targeter->FindTargetForLocatedEvent(child, event) : + FindTargetForLocatedEvent(child, event); + if (child_target) + return child_target; + target = child; + } + target->ConvertEventToTarget(root, event); + } + return root->CanAcceptEvent(*event) ? root : NULL; +} + +bool EventTargeter::SubtreeShouldBeExploredForEvent(EventTarget* target, + const LocatedEvent& event) { + return true; +} + +} // namespace ui diff --git a/ui/events/event_targeter.h b/ui/events/event_targeter.h new file mode 100644 index 0000000000..a28662b5e8 --- /dev/null +++ b/ui/events/event_targeter.h @@ -0,0 +1,45 @@ +// 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. + +#ifndef UI_EVENTS_EVENT_TARGETER_H_ +#define UI_EVENTS_EVENT_TARGETER_H_ + +#include "base/compiler_specific.h" +#include "ui/events/event.h" +#include "ui/events/events_export.h" + +namespace ui { + +class Event; +class EventTarget; +class LocatedEvent; + +class EVENTS_EXPORT EventTargeter { + public: + virtual ~EventTargeter(); + + // Returns the target |event| should be dispatched to. If there is no such + // target, this should return NULL. + virtual EventTarget* FindTargetForEvent(EventTarget* root, + Event* event); + + // Same as FindTargetForEvent(), but used for positional events. The location + // etc. of |event| are in |root|'s coordinate system. When finding the target + // for the event, the targeter can mutate the |event| (e.g. chnage the + // coordinate to be in the returned target's coordinate sustem) so that it can + // be dispatched to the target without any farther modification. + virtual EventTarget* FindTargetForLocatedEvent(EventTarget* root, + LocatedEvent* event); + + protected: + // Returns true of |target| or one of its descendants can be a target of + // |event|. Note that the location etc. of |event| is in |target|'s parent's + // coordinate system. + virtual bool SubtreeShouldBeExploredForEvent(EventTarget* target, + const LocatedEvent& event); +}; + +} // namespace ui + +#endif // UI_EVENTS_EVENT_TARGETER_H_ diff --git a/ui/events/event_unittest.cc b/ui/events/event_unittest.cc index 7fbceca2ef..012fc608b6 100644 --- a/ui/events/event_unittest.cc +++ b/ui/events/event_unittest.cc @@ -5,6 +5,8 @@ #include "base/memory/scoped_ptr.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/events/event.h" +#include "ui/events/event_utils.h" +#include "ui/events/keycodes/dom4/keycode_converter.h" #include "ui/events/test/events_test_utils.h" #if defined(USE_X11) @@ -262,9 +264,71 @@ TEST(EventTest, NormalizeKeyEventFlags) { TEST(EventTest, KeyEventCopy) { KeyEvent key(ET_KEY_PRESSED, VKEY_A, EF_NONE, false); - scoped_ptr<KeyEvent> copied_key(key.Copy()); + scoped_ptr<KeyEvent> copied_key(new KeyEvent(key)); EXPECT_EQ(copied_key->type(), key.type()); EXPECT_EQ(copied_key->key_code(), key.key_code()); } +TEST(EventTest, KeyEventCode) { + KeycodeConverter* conv = KeycodeConverter::GetInstance(); + + const char kCodeForSpace[] = "Space"; + const uint16 kNativeCodeSpace = conv->CodeToNativeKeycode(kCodeForSpace); + ASSERT_NE(conv->InvalidNativeKeycode(), kNativeCodeSpace); + + { + KeyEvent key(ET_KEY_PRESSED, VKEY_SPACE, kCodeForSpace, EF_NONE, false); + EXPECT_EQ(kCodeForSpace, key.code()); + } + { + // Regardless the KeyEvent.key_code (VKEY_RETURN), code should be + // the specified value. + KeyEvent key(ET_KEY_PRESSED, VKEY_RETURN, kCodeForSpace, EF_NONE, false); + EXPECT_EQ(kCodeForSpace, key.code()); + } + { + // If the synthetic event is initialized without code, it returns + // an empty string. + // TODO(komatsu): Fill a fallback value assuming the US keyboard layout. + KeyEvent key(ET_KEY_PRESSED, VKEY_SPACE, EF_NONE, false); + EXPECT_TRUE(key.code().empty()); + } +#if defined(USE_X11) + { + // KeyEvent converts from the native keycode (XKB) to the code. + ScopedXI2Event xevent; + xevent.InitKeyEvent(ET_KEY_PRESSED, VKEY_SPACE, kNativeCodeSpace); + KeyEvent key(xevent, false); + EXPECT_EQ(kCodeForSpace, key.code()); + } +#endif // USE_X11 +#if defined(OS_WIN) + { + // Test a non extended key. + ASSERT_EQ((kNativeCodeSpace & 0xFF), kNativeCodeSpace); + + const LPARAM lParam = GetLParamFromScanCode(kNativeCodeSpace); + MSG native_event = { NULL, WM_KEYUP, VKEY_SPACE, lParam }; + KeyEvent key(native_event, false); + + // KeyEvent converts from the native keycode (scan code) to the code. + EXPECT_EQ(kCodeForSpace, key.code()); + } + { + const char kCodeForHome[] = "Home"; + const uint16 kNativeCodeHome = 0xe047; + + // 'Home' is an extended key with 0xe000 bits. + ASSERT_NE((kNativeCodeHome & 0xFF), kNativeCodeHome); + const LPARAM lParam = GetLParamFromScanCode(kNativeCodeHome); + + MSG native_event = { NULL, WM_KEYUP, VKEY_HOME, lParam }; + KeyEvent key(native_event, false); + + // KeyEvent converts from the native keycode (scan code) to the code. + EXPECT_EQ(kCodeForHome, key.code()); + } +#endif // OS_WIN +} + } // namespace ui diff --git a/ui/events/event_utils.h b/ui/events/event_utils.h index be210e6851..e67a74111d 100644 --- a/ui/events/event_utils.h +++ b/ui/events/event_utils.h @@ -68,6 +68,12 @@ EVENTS_EXPORT int EventButtonFromNative(const base::NativeEvent& native_event); EVENTS_EXPORT KeyboardCode KeyboardCodeFromNative( const base::NativeEvent& native_event); +// Returns the DOM KeyboardEvent code (physical location in the +// keyboard) from a native event. The ownership of the return value +// is NOT trasferred to the caller. +EVENTS_EXPORT const char* CodeFromNative( + const base::NativeEvent& native_event); + // Returns true if the message is a mouse event. EVENTS_EXPORT bool IsMouseEvent(const base::NativeEvent& native_event); @@ -145,6 +151,11 @@ EVENTS_EXPORT int GetModifiersFromKeyState(); // Returns true if |message| identifies a mouse event that was generated as the // result of a touch event. EVENTS_EXPORT bool IsMouseEventFromTouch(UINT message); + +// Converts scan code and lParam each other. The scan code +// representing an extended key contains 0xE000 bits. +EVENTS_EXPORT uint16 GetScanCodeFromLParam(LPARAM lParam); +EVENTS_EXPORT LPARAM GetLParamFromScanCode(uint16 scan_code); #endif // Returns true if default post-target handling was canceled for |event| after diff --git a/ui/events/events.gyp b/ui/events/events.gyp index 9c88e31ccb..b7a4313682 100644 --- a/ui/events/events.gyp +++ b/ui/events/events.gyp @@ -85,8 +85,15 @@ 'event_dispatcher.h', 'event_handler.cc', 'event_handler.h', + 'event_processor.cc', + 'event_processor.h', + 'event_source.cc', + 'event_source.h', 'event_target.cc', 'event_target.h', + 'event_target_iterator.h', + 'event_targeter.cc', + 'event_targeter.h', 'event_utils.cc', 'event_utils.h', 'events_export.h', @@ -154,6 +161,10 @@ 'test/events_test_utils.h', 'test/events_test_utils_x11.cc', 'test/events_test_utils_x11.h', + 'test/test_event_processor.cc', + 'test/test_event_processor.h', + 'test/test_event_target.cc', + 'test/test_event_target.h', ], 'conditions': [ ['use_x11==1', { @@ -178,17 +189,25 @@ ], 'sources': [ 'event_dispatcher_unittest.cc', + 'event_processor_unittest.cc', 'event_unittest.cc', 'gestures/velocity_calculator_unittest.cc', 'keycodes/dom4/keycode_converter_unittest.cc', 'latency_info_unittest.cc', - 'test/events_unittests.cc', + 'test/run_all_unittests.cc', 'test/test_suite.cc', 'test/test_suite.h', 'ozone/evdev/key_event_converter_unittest.cc', 'ozone/evdev/touch_event_converter_unittest.cc', 'x/events_x_unittest.cc', ], + 'conditions': [ + ['OS=="linux" and linux_use_tcmalloc==1', { + 'dependencies': [ + '<(DEPTH)/base/allocator/allocator.gyp:allocator', + ], + }], + ], }, ], } diff --git a/ui/events/events.target.darwin-arm.mk b/ui/events/events.target.darwin-arm.mk new file mode 100644 index 0000000000..f2c8437d7c --- /dev/null +++ b/ui/events/events.target.darwin-arm.mk @@ -0,0 +1,334 @@ +# This file is generated by gyp; do not edit. + +include $(CLEAR_VARS) + +LOCAL_MODULE_CLASS := STATIC_LIBRARIES +LOCAL_MODULE := ui_events_events_gyp +LOCAL_MODULE_SUFFIX := .a +LOCAL_MODULE_TAGS := optional +gyp_intermediate_dir := $(call local-intermediates-dir) +gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) + +# Make sure our deps are built first. +GYP_TARGET_DEPENDENCIES := \ + $(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \ + $(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a + +GYP_GENERATED_OUTPUTS := + +# Make sure our deps and generated files are built first. +LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS) + +LOCAL_CPP_EXTENSION := .cc +LOCAL_GENERATED_SOURCES := + +GYP_COPIED_SOURCE_ORIGIN_DIRS := + +LOCAL_SRC_FILES := \ + ui/events/event.cc \ + ui/events/event_dispatcher.cc \ + ui/events/event_handler.cc \ + ui/events/event_processor.cc \ + ui/events/event_source.cc \ + ui/events/event_target.cc \ + ui/events/event_targeter.cc \ + ui/events/event_utils.cc \ + ui/events/events_stub.cc \ + ui/events/gestures/gesture_configuration.cc \ + ui/events/gestures/gesture_point.cc \ + ui/events/gestures/gesture_recognizer_impl.cc \ + ui/events/gestures/gesture_sequence.cc \ + ui/events/gestures/gesture_types.cc \ + ui/events/gestures/gesture_util.cc \ + ui/events/gestures/velocity_calculator.cc + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Debug := \ + -fstack-protector \ + --param=ssp-buffer-size=4 \ + -Werror \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -fno-tree-sra \ + -fuse-ld=gold \ + -Wno-psabi \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fstack-protector \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -Os \ + -g \ + -fomit-frame-pointer \ + -fdata-sections \ + -ffunction-sections + +MY_DEFS_Debug := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-DEVENTS_IMPLEMENTATION' \ + '-DSK_ENABLE_INST_COUNT=0' \ + '-DSK_SUPPORT_GPU=1' \ + '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \ + '-DSK_ENABLE_LEGACY_API_ALIASING=1' \ + '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \ + '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \ + '-DGR_GL_IGNORE_ES3_MSAA=0' \ + '-DSK_BUILD_FOR_ANDROID' \ + '-DSK_USE_POSIX_THREADS' \ + '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \ + '-DU_USING_ICU_NAMESPACE=0' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \ + '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \ + '-D_DEBUG' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Debug := \ + $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ + $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(LOCAL_PATH) \ + $(LOCAL_PATH)/skia/config \ + $(LOCAL_PATH)/third_party/skia/src/core \ + $(LOCAL_PATH)/third_party/skia/include/core \ + $(LOCAL_PATH)/third_party/skia/include/effects \ + $(LOCAL_PATH)/third_party/skia/include/pdf \ + $(LOCAL_PATH)/third_party/skia/include/gpu \ + $(LOCAL_PATH)/third_party/skia/include/lazy \ + $(LOCAL_PATH)/third_party/skia/include/pathops \ + $(LOCAL_PATH)/third_party/skia/include/pipe \ + $(LOCAL_PATH)/third_party/skia/include/ports \ + $(LOCAL_PATH)/third_party/skia/include/utils \ + $(LOCAL_PATH)/skia/ext \ + $(PWD)/external/icu4c/common \ + $(PWD)/external/icu4c/i18n \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Debug := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-abi \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Release := \ + -fstack-protector \ + --param=ssp-buffer-size=4 \ + -Werror \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -fno-tree-sra \ + -fuse-ld=gold \ + -Wno-psabi \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fstack-protector \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -Os \ + -fno-ident \ + -fdata-sections \ + -ffunction-sections \ + -fomit-frame-pointer + +MY_DEFS_Release := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-DEVENTS_IMPLEMENTATION' \ + '-DSK_ENABLE_INST_COUNT=0' \ + '-DSK_SUPPORT_GPU=1' \ + '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \ + '-DSK_ENABLE_LEGACY_API_ALIASING=1' \ + '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \ + '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \ + '-DGR_GL_IGNORE_ES3_MSAA=0' \ + '-DSK_BUILD_FOR_ANDROID' \ + '-DSK_USE_POSIX_THREADS' \ + '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \ + '-DU_USING_ICU_NAMESPACE=0' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DNDEBUG' \ + '-DNVALGRIND' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \ + '-D_FORTIFY_SOURCE=2' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Release := \ + $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ + $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(LOCAL_PATH) \ + $(LOCAL_PATH)/skia/config \ + $(LOCAL_PATH)/third_party/skia/src/core \ + $(LOCAL_PATH)/third_party/skia/include/core \ + $(LOCAL_PATH)/third_party/skia/include/effects \ + $(LOCAL_PATH)/third_party/skia/include/pdf \ + $(LOCAL_PATH)/third_party/skia/include/gpu \ + $(LOCAL_PATH)/third_party/skia/include/lazy \ + $(LOCAL_PATH)/third_party/skia/include/pathops \ + $(LOCAL_PATH)/third_party/skia/include/pipe \ + $(LOCAL_PATH)/third_party/skia/include/ports \ + $(LOCAL_PATH)/third_party/skia/include/utils \ + $(LOCAL_PATH)/skia/ext \ + $(PWD)/external/icu4c/common \ + $(PWD)/external/icu4c/i18n \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Release := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-abi \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION)) +LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION)) +LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION)) +### Rules for final target. + +LOCAL_LDFLAGS_Debug := \ + -Wl,-z,now \ + -Wl,-z,relro \ + -Wl,-z,noexecstack \ + -fPIC \ + -Wl,-z,relro \ + -Wl,-z,now \ + -fuse-ld=gold \ + -nostdlib \ + -Wl,--no-undefined \ + -Wl,--exclude-libs=ALL \ + -Wl,--icf=safe \ + -Wl,--fatal-warnings \ + -Wl,--gc-sections \ + -Wl,--warn-shared-textrel \ + -Wl,-O1 \ + -Wl,--as-needed + + +LOCAL_LDFLAGS_Release := \ + -Wl,-z,now \ + -Wl,-z,relro \ + -Wl,-z,noexecstack \ + -fPIC \ + -Wl,-z,relro \ + -Wl,-z,now \ + -fuse-ld=gold \ + -nostdlib \ + -Wl,--no-undefined \ + -Wl,--exclude-libs=ALL \ + -Wl,--icf=safe \ + -Wl,-O1 \ + -Wl,--as-needed \ + -Wl,--gc-sections \ + -Wl,--fatal-warnings \ + -Wl,--warn-shared-textrel + + +LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION)) + +LOCAL_STATIC_LIBRARIES := \ + skia_skia_library_gyp + +# Enable grouping to fix circular references +LOCAL_GROUP_STATIC_LIBRARIES := true + +LOCAL_SHARED_LIBRARIES := \ + libstlport \ + libdl + +# Add target alias to "gyp_all_modules" target. +.PHONY: gyp_all_modules +gyp_all_modules: ui_events_events_gyp + +# Alias gyp target name. +.PHONY: events +events: ui_events_events_gyp + +include $(BUILD_STATIC_LIBRARY) diff --git a/ui/events/events.target.darwin-mips.mk b/ui/events/events.target.darwin-mips.mk new file mode 100644 index 0000000000..049b8d775b --- /dev/null +++ b/ui/events/events.target.darwin-mips.mk @@ -0,0 +1,328 @@ +# This file is generated by gyp; do not edit. + +include $(CLEAR_VARS) + +LOCAL_MODULE_CLASS := STATIC_LIBRARIES +LOCAL_MODULE := ui_events_events_gyp +LOCAL_MODULE_SUFFIX := .a +LOCAL_MODULE_TAGS := optional +gyp_intermediate_dir := $(call local-intermediates-dir) +gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) + +# Make sure our deps are built first. +GYP_TARGET_DEPENDENCIES := \ + $(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \ + $(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a + +GYP_GENERATED_OUTPUTS := + +# Make sure our deps and generated files are built first. +LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS) + +LOCAL_CPP_EXTENSION := .cc +LOCAL_GENERATED_SOURCES := + +GYP_COPIED_SOURCE_ORIGIN_DIRS := + +LOCAL_SRC_FILES := \ + ui/events/event.cc \ + ui/events/event_dispatcher.cc \ + ui/events/event_handler.cc \ + ui/events/event_processor.cc \ + ui/events/event_source.cc \ + ui/events/event_target.cc \ + ui/events/event_targeter.cc \ + ui/events/event_utils.cc \ + ui/events/events_stub.cc \ + ui/events/gestures/gesture_configuration.cc \ + ui/events/gestures/gesture_point.cc \ + ui/events/gestures/gesture_recognizer_impl.cc \ + ui/events/gestures/gesture_sequence.cc \ + ui/events/gestures/gesture_types.cc \ + ui/events/gestures/gesture_util.cc \ + ui/events/gestures/velocity_calculator.cc + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Debug := \ + -fstack-protector \ + --param=ssp-buffer-size=4 \ + \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -EL \ + -mhard-float \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fstack-protector \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -Os \ + -g \ + -fomit-frame-pointer \ + -fdata-sections \ + -ffunction-sections + +MY_DEFS_Debug := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-DEVENTS_IMPLEMENTATION' \ + '-DSK_ENABLE_INST_COUNT=0' \ + '-DSK_SUPPORT_GPU=1' \ + '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \ + '-DSK_ENABLE_LEGACY_API_ALIASING=1' \ + '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \ + '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \ + '-DGR_GL_IGNORE_ES3_MSAA=0' \ + '-DSK_BUILD_FOR_ANDROID' \ + '-DSK_USE_POSIX_THREADS' \ + '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \ + '-DU_USING_ICU_NAMESPACE=0' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \ + '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \ + '-D_DEBUG' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Debug := \ + $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ + $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(LOCAL_PATH) \ + $(LOCAL_PATH)/skia/config \ + $(LOCAL_PATH)/third_party/skia/src/core \ + $(LOCAL_PATH)/third_party/skia/include/core \ + $(LOCAL_PATH)/third_party/skia/include/effects \ + $(LOCAL_PATH)/third_party/skia/include/pdf \ + $(LOCAL_PATH)/third_party/skia/include/gpu \ + $(LOCAL_PATH)/third_party/skia/include/lazy \ + $(LOCAL_PATH)/third_party/skia/include/pathops \ + $(LOCAL_PATH)/third_party/skia/include/pipe \ + $(LOCAL_PATH)/third_party/skia/include/ports \ + $(LOCAL_PATH)/third_party/skia/include/utils \ + $(LOCAL_PATH)/skia/ext \ + $(PWD)/external/icu4c/common \ + $(PWD)/external/icu4c/i18n \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Debug := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-uninitialized \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Release := \ + -fstack-protector \ + --param=ssp-buffer-size=4 \ + \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -EL \ + -mhard-float \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fstack-protector \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -Os \ + -fno-ident \ + -fdata-sections \ + -ffunction-sections \ + -fomit-frame-pointer + +MY_DEFS_Release := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-DEVENTS_IMPLEMENTATION' \ + '-DSK_ENABLE_INST_COUNT=0' \ + '-DSK_SUPPORT_GPU=1' \ + '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \ + '-DSK_ENABLE_LEGACY_API_ALIASING=1' \ + '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \ + '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \ + '-DGR_GL_IGNORE_ES3_MSAA=0' \ + '-DSK_BUILD_FOR_ANDROID' \ + '-DSK_USE_POSIX_THREADS' \ + '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \ + '-DU_USING_ICU_NAMESPACE=0' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DNDEBUG' \ + '-DNVALGRIND' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \ + '-D_FORTIFY_SOURCE=2' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Release := \ + $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ + $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(LOCAL_PATH) \ + $(LOCAL_PATH)/skia/config \ + $(LOCAL_PATH)/third_party/skia/src/core \ + $(LOCAL_PATH)/third_party/skia/include/core \ + $(LOCAL_PATH)/third_party/skia/include/effects \ + $(LOCAL_PATH)/third_party/skia/include/pdf \ + $(LOCAL_PATH)/third_party/skia/include/gpu \ + $(LOCAL_PATH)/third_party/skia/include/lazy \ + $(LOCAL_PATH)/third_party/skia/include/pathops \ + $(LOCAL_PATH)/third_party/skia/include/pipe \ + $(LOCAL_PATH)/third_party/skia/include/ports \ + $(LOCAL_PATH)/third_party/skia/include/utils \ + $(LOCAL_PATH)/skia/ext \ + $(PWD)/external/icu4c/common \ + $(PWD)/external/icu4c/i18n \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Release := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-uninitialized \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION)) +LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION)) +LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION)) +### Rules for final target. + +LOCAL_LDFLAGS_Debug := \ + -Wl,-z,now \ + -Wl,-z,relro \ + -Wl,-z,noexecstack \ + -fPIC \ + -EL \ + -Wl,--no-keep-memory \ + -nostdlib \ + -Wl,--no-undefined \ + -Wl,--exclude-libs=ALL \ + -Wl,--fatal-warnings \ + -Wl,--gc-sections \ + -Wl,--warn-shared-textrel \ + -Wl,-O1 \ + -Wl,--as-needed + + +LOCAL_LDFLAGS_Release := \ + -Wl,-z,now \ + -Wl,-z,relro \ + -Wl,-z,noexecstack \ + -fPIC \ + -EL \ + -Wl,--no-keep-memory \ + -nostdlib \ + -Wl,--no-undefined \ + -Wl,--exclude-libs=ALL \ + -Wl,-O1 \ + -Wl,--as-needed \ + -Wl,--gc-sections \ + -Wl,--fatal-warnings \ + -Wl,--warn-shared-textrel + + +LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION)) + +LOCAL_STATIC_LIBRARIES := \ + skia_skia_library_gyp + +# Enable grouping to fix circular references +LOCAL_GROUP_STATIC_LIBRARIES := true + +LOCAL_SHARED_LIBRARIES := \ + libstlport \ + libdl + +# Add target alias to "gyp_all_modules" target. +.PHONY: gyp_all_modules +gyp_all_modules: ui_events_events_gyp + +# Alias gyp target name. +.PHONY: events +events: ui_events_events_gyp + +include $(BUILD_STATIC_LIBRARY) diff --git a/ui/events/events.target.darwin-x86.mk b/ui/events/events.target.darwin-x86.mk new file mode 100644 index 0000000000..c6f7ecdf13 --- /dev/null +++ b/ui/events/events.target.darwin-x86.mk @@ -0,0 +1,334 @@ +# This file is generated by gyp; do not edit. + +include $(CLEAR_VARS) + +LOCAL_MODULE_CLASS := STATIC_LIBRARIES +LOCAL_MODULE := ui_events_events_gyp +LOCAL_MODULE_SUFFIX := .a +LOCAL_MODULE_TAGS := optional +gyp_intermediate_dir := $(call local-intermediates-dir) +gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) + +# Make sure our deps are built first. +GYP_TARGET_DEPENDENCIES := \ + $(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \ + $(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a + +GYP_GENERATED_OUTPUTS := + +# Make sure our deps and generated files are built first. +LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS) + +LOCAL_CPP_EXTENSION := .cc +LOCAL_GENERATED_SOURCES := + +GYP_COPIED_SOURCE_ORIGIN_DIRS := + +LOCAL_SRC_FILES := \ + ui/events/event.cc \ + ui/events/event_dispatcher.cc \ + ui/events/event_handler.cc \ + ui/events/event_processor.cc \ + ui/events/event_source.cc \ + ui/events/event_target.cc \ + ui/events/event_targeter.cc \ + ui/events/event_utils.cc \ + ui/events/events_stub.cc \ + ui/events/gestures/gesture_configuration.cc \ + ui/events/gestures/gesture_point.cc \ + ui/events/gestures/gesture_recognizer_impl.cc \ + ui/events/gestures/gesture_sequence.cc \ + ui/events/gestures/gesture_types.cc \ + ui/events/gestures/gesture_util.cc \ + ui/events/gestures/velocity_calculator.cc + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Debug := \ + --param=ssp-buffer-size=4 \ + -Werror \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -m32 \ + -mmmx \ + -march=pentium4 \ + -msse2 \ + -mfpmath=sse \ + -fuse-ld=gold \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -fno-stack-protector \ + -Os \ + -g \ + -fomit-frame-pointer \ + -fdata-sections \ + -ffunction-sections + +MY_DEFS_Debug := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-DEVENTS_IMPLEMENTATION' \ + '-DSK_ENABLE_INST_COUNT=0' \ + '-DSK_SUPPORT_GPU=1' \ + '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \ + '-DSK_ENABLE_LEGACY_API_ALIASING=1' \ + '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \ + '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \ + '-DGR_GL_IGNORE_ES3_MSAA=0' \ + '-DSK_BUILD_FOR_ANDROID' \ + '-DSK_USE_POSIX_THREADS' \ + '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \ + '-DU_USING_ICU_NAMESPACE=0' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \ + '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \ + '-D_DEBUG' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Debug := \ + $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ + $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(LOCAL_PATH) \ + $(LOCAL_PATH)/skia/config \ + $(LOCAL_PATH)/third_party/skia/src/core \ + $(LOCAL_PATH)/third_party/skia/include/core \ + $(LOCAL_PATH)/third_party/skia/include/effects \ + $(LOCAL_PATH)/third_party/skia/include/pdf \ + $(LOCAL_PATH)/third_party/skia/include/gpu \ + $(LOCAL_PATH)/third_party/skia/include/lazy \ + $(LOCAL_PATH)/third_party/skia/include/pathops \ + $(LOCAL_PATH)/third_party/skia/include/pipe \ + $(LOCAL_PATH)/third_party/skia/include/ports \ + $(LOCAL_PATH)/third_party/skia/include/utils \ + $(LOCAL_PATH)/skia/ext \ + $(PWD)/external/icu4c/common \ + $(PWD)/external/icu4c/i18n \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Debug := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Release := \ + --param=ssp-buffer-size=4 \ + -Werror \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -m32 \ + -mmmx \ + -march=pentium4 \ + -msse2 \ + -mfpmath=sse \ + -fuse-ld=gold \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -fno-stack-protector \ + -Os \ + -fno-ident \ + -fdata-sections \ + -ffunction-sections \ + -fomit-frame-pointer \ + -fno-unwind-tables \ + -fno-asynchronous-unwind-tables + +MY_DEFS_Release := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-DEVENTS_IMPLEMENTATION' \ + '-DSK_ENABLE_INST_COUNT=0' \ + '-DSK_SUPPORT_GPU=1' \ + '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \ + '-DSK_ENABLE_LEGACY_API_ALIASING=1' \ + '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \ + '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \ + '-DGR_GL_IGNORE_ES3_MSAA=0' \ + '-DSK_BUILD_FOR_ANDROID' \ + '-DSK_USE_POSIX_THREADS' \ + '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \ + '-DU_USING_ICU_NAMESPACE=0' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DNDEBUG' \ + '-DNVALGRIND' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \ + '-D_FORTIFY_SOURCE=2' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Release := \ + $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ + $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(LOCAL_PATH) \ + $(LOCAL_PATH)/skia/config \ + $(LOCAL_PATH)/third_party/skia/src/core \ + $(LOCAL_PATH)/third_party/skia/include/core \ + $(LOCAL_PATH)/third_party/skia/include/effects \ + $(LOCAL_PATH)/third_party/skia/include/pdf \ + $(LOCAL_PATH)/third_party/skia/include/gpu \ + $(LOCAL_PATH)/third_party/skia/include/lazy \ + $(LOCAL_PATH)/third_party/skia/include/pathops \ + $(LOCAL_PATH)/third_party/skia/include/pipe \ + $(LOCAL_PATH)/third_party/skia/include/ports \ + $(LOCAL_PATH)/third_party/skia/include/utils \ + $(LOCAL_PATH)/skia/ext \ + $(PWD)/external/icu4c/common \ + $(PWD)/external/icu4c/i18n \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Release := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION)) +LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION)) +LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION)) +### Rules for final target. + +LOCAL_LDFLAGS_Debug := \ + -Wl,-z,now \ + -Wl,-z,relro \ + -Wl,-z,noexecstack \ + -fPIC \ + -m32 \ + -fuse-ld=gold \ + -nostdlib \ + -Wl,--no-undefined \ + -Wl,--exclude-libs=ALL \ + -Wl,--fatal-warnings \ + -Wl,--gc-sections \ + -Wl,--warn-shared-textrel \ + -Wl,-O1 \ + -Wl,--as-needed + + +LOCAL_LDFLAGS_Release := \ + -Wl,-z,now \ + -Wl,-z,relro \ + -Wl,-z,noexecstack \ + -fPIC \ + -m32 \ + -fuse-ld=gold \ + -nostdlib \ + -Wl,--no-undefined \ + -Wl,--exclude-libs=ALL \ + -Wl,-O1 \ + -Wl,--as-needed \ + -Wl,--gc-sections \ + -Wl,--fatal-warnings \ + -Wl,--warn-shared-textrel + + +LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION)) + +LOCAL_STATIC_LIBRARIES := \ + skia_skia_library_gyp + +# Enable grouping to fix circular references +LOCAL_GROUP_STATIC_LIBRARIES := true + +LOCAL_SHARED_LIBRARIES := \ + libstlport \ + libdl + +# Add target alias to "gyp_all_modules" target. +.PHONY: gyp_all_modules +gyp_all_modules: ui_events_events_gyp + +# Alias gyp target name. +.PHONY: events +events: ui_events_events_gyp + +include $(BUILD_STATIC_LIBRARY) diff --git a/ui/events/events.target.linux-arm.mk b/ui/events/events.target.linux-arm.mk new file mode 100644 index 0000000000..f2c8437d7c --- /dev/null +++ b/ui/events/events.target.linux-arm.mk @@ -0,0 +1,334 @@ +# This file is generated by gyp; do not edit. + +include $(CLEAR_VARS) + +LOCAL_MODULE_CLASS := STATIC_LIBRARIES +LOCAL_MODULE := ui_events_events_gyp +LOCAL_MODULE_SUFFIX := .a +LOCAL_MODULE_TAGS := optional +gyp_intermediate_dir := $(call local-intermediates-dir) +gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) + +# Make sure our deps are built first. +GYP_TARGET_DEPENDENCIES := \ + $(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \ + $(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a + +GYP_GENERATED_OUTPUTS := + +# Make sure our deps and generated files are built first. +LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS) + +LOCAL_CPP_EXTENSION := .cc +LOCAL_GENERATED_SOURCES := + +GYP_COPIED_SOURCE_ORIGIN_DIRS := + +LOCAL_SRC_FILES := \ + ui/events/event.cc \ + ui/events/event_dispatcher.cc \ + ui/events/event_handler.cc \ + ui/events/event_processor.cc \ + ui/events/event_source.cc \ + ui/events/event_target.cc \ + ui/events/event_targeter.cc \ + ui/events/event_utils.cc \ + ui/events/events_stub.cc \ + ui/events/gestures/gesture_configuration.cc \ + ui/events/gestures/gesture_point.cc \ + ui/events/gestures/gesture_recognizer_impl.cc \ + ui/events/gestures/gesture_sequence.cc \ + ui/events/gestures/gesture_types.cc \ + ui/events/gestures/gesture_util.cc \ + ui/events/gestures/velocity_calculator.cc + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Debug := \ + -fstack-protector \ + --param=ssp-buffer-size=4 \ + -Werror \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -fno-tree-sra \ + -fuse-ld=gold \ + -Wno-psabi \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fstack-protector \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -Os \ + -g \ + -fomit-frame-pointer \ + -fdata-sections \ + -ffunction-sections + +MY_DEFS_Debug := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-DEVENTS_IMPLEMENTATION' \ + '-DSK_ENABLE_INST_COUNT=0' \ + '-DSK_SUPPORT_GPU=1' \ + '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \ + '-DSK_ENABLE_LEGACY_API_ALIASING=1' \ + '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \ + '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \ + '-DGR_GL_IGNORE_ES3_MSAA=0' \ + '-DSK_BUILD_FOR_ANDROID' \ + '-DSK_USE_POSIX_THREADS' \ + '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \ + '-DU_USING_ICU_NAMESPACE=0' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \ + '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \ + '-D_DEBUG' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Debug := \ + $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ + $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(LOCAL_PATH) \ + $(LOCAL_PATH)/skia/config \ + $(LOCAL_PATH)/third_party/skia/src/core \ + $(LOCAL_PATH)/third_party/skia/include/core \ + $(LOCAL_PATH)/third_party/skia/include/effects \ + $(LOCAL_PATH)/third_party/skia/include/pdf \ + $(LOCAL_PATH)/third_party/skia/include/gpu \ + $(LOCAL_PATH)/third_party/skia/include/lazy \ + $(LOCAL_PATH)/third_party/skia/include/pathops \ + $(LOCAL_PATH)/third_party/skia/include/pipe \ + $(LOCAL_PATH)/third_party/skia/include/ports \ + $(LOCAL_PATH)/third_party/skia/include/utils \ + $(LOCAL_PATH)/skia/ext \ + $(PWD)/external/icu4c/common \ + $(PWD)/external/icu4c/i18n \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Debug := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-abi \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Release := \ + -fstack-protector \ + --param=ssp-buffer-size=4 \ + -Werror \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -fno-tree-sra \ + -fuse-ld=gold \ + -Wno-psabi \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fstack-protector \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -Os \ + -fno-ident \ + -fdata-sections \ + -ffunction-sections \ + -fomit-frame-pointer + +MY_DEFS_Release := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-DEVENTS_IMPLEMENTATION' \ + '-DSK_ENABLE_INST_COUNT=0' \ + '-DSK_SUPPORT_GPU=1' \ + '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \ + '-DSK_ENABLE_LEGACY_API_ALIASING=1' \ + '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \ + '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \ + '-DGR_GL_IGNORE_ES3_MSAA=0' \ + '-DSK_BUILD_FOR_ANDROID' \ + '-DSK_USE_POSIX_THREADS' \ + '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \ + '-DU_USING_ICU_NAMESPACE=0' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DNDEBUG' \ + '-DNVALGRIND' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \ + '-D_FORTIFY_SOURCE=2' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Release := \ + $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ + $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(LOCAL_PATH) \ + $(LOCAL_PATH)/skia/config \ + $(LOCAL_PATH)/third_party/skia/src/core \ + $(LOCAL_PATH)/third_party/skia/include/core \ + $(LOCAL_PATH)/third_party/skia/include/effects \ + $(LOCAL_PATH)/third_party/skia/include/pdf \ + $(LOCAL_PATH)/third_party/skia/include/gpu \ + $(LOCAL_PATH)/third_party/skia/include/lazy \ + $(LOCAL_PATH)/third_party/skia/include/pathops \ + $(LOCAL_PATH)/third_party/skia/include/pipe \ + $(LOCAL_PATH)/third_party/skia/include/ports \ + $(LOCAL_PATH)/third_party/skia/include/utils \ + $(LOCAL_PATH)/skia/ext \ + $(PWD)/external/icu4c/common \ + $(PWD)/external/icu4c/i18n \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Release := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-abi \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION)) +LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION)) +LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION)) +### Rules for final target. + +LOCAL_LDFLAGS_Debug := \ + -Wl,-z,now \ + -Wl,-z,relro \ + -Wl,-z,noexecstack \ + -fPIC \ + -Wl,-z,relro \ + -Wl,-z,now \ + -fuse-ld=gold \ + -nostdlib \ + -Wl,--no-undefined \ + -Wl,--exclude-libs=ALL \ + -Wl,--icf=safe \ + -Wl,--fatal-warnings \ + -Wl,--gc-sections \ + -Wl,--warn-shared-textrel \ + -Wl,-O1 \ + -Wl,--as-needed + + +LOCAL_LDFLAGS_Release := \ + -Wl,-z,now \ + -Wl,-z,relro \ + -Wl,-z,noexecstack \ + -fPIC \ + -Wl,-z,relro \ + -Wl,-z,now \ + -fuse-ld=gold \ + -nostdlib \ + -Wl,--no-undefined \ + -Wl,--exclude-libs=ALL \ + -Wl,--icf=safe \ + -Wl,-O1 \ + -Wl,--as-needed \ + -Wl,--gc-sections \ + -Wl,--fatal-warnings \ + -Wl,--warn-shared-textrel + + +LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION)) + +LOCAL_STATIC_LIBRARIES := \ + skia_skia_library_gyp + +# Enable grouping to fix circular references +LOCAL_GROUP_STATIC_LIBRARIES := true + +LOCAL_SHARED_LIBRARIES := \ + libstlport \ + libdl + +# Add target alias to "gyp_all_modules" target. +.PHONY: gyp_all_modules +gyp_all_modules: ui_events_events_gyp + +# Alias gyp target name. +.PHONY: events +events: ui_events_events_gyp + +include $(BUILD_STATIC_LIBRARY) diff --git a/ui/events/events.target.linux-mips.mk b/ui/events/events.target.linux-mips.mk new file mode 100644 index 0000000000..049b8d775b --- /dev/null +++ b/ui/events/events.target.linux-mips.mk @@ -0,0 +1,328 @@ +# This file is generated by gyp; do not edit. + +include $(CLEAR_VARS) + +LOCAL_MODULE_CLASS := STATIC_LIBRARIES +LOCAL_MODULE := ui_events_events_gyp +LOCAL_MODULE_SUFFIX := .a +LOCAL_MODULE_TAGS := optional +gyp_intermediate_dir := $(call local-intermediates-dir) +gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) + +# Make sure our deps are built first. +GYP_TARGET_DEPENDENCIES := \ + $(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \ + $(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a + +GYP_GENERATED_OUTPUTS := + +# Make sure our deps and generated files are built first. +LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS) + +LOCAL_CPP_EXTENSION := .cc +LOCAL_GENERATED_SOURCES := + +GYP_COPIED_SOURCE_ORIGIN_DIRS := + +LOCAL_SRC_FILES := \ + ui/events/event.cc \ + ui/events/event_dispatcher.cc \ + ui/events/event_handler.cc \ + ui/events/event_processor.cc \ + ui/events/event_source.cc \ + ui/events/event_target.cc \ + ui/events/event_targeter.cc \ + ui/events/event_utils.cc \ + ui/events/events_stub.cc \ + ui/events/gestures/gesture_configuration.cc \ + ui/events/gestures/gesture_point.cc \ + ui/events/gestures/gesture_recognizer_impl.cc \ + ui/events/gestures/gesture_sequence.cc \ + ui/events/gestures/gesture_types.cc \ + ui/events/gestures/gesture_util.cc \ + ui/events/gestures/velocity_calculator.cc + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Debug := \ + -fstack-protector \ + --param=ssp-buffer-size=4 \ + \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -EL \ + -mhard-float \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fstack-protector \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -Os \ + -g \ + -fomit-frame-pointer \ + -fdata-sections \ + -ffunction-sections + +MY_DEFS_Debug := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-DEVENTS_IMPLEMENTATION' \ + '-DSK_ENABLE_INST_COUNT=0' \ + '-DSK_SUPPORT_GPU=1' \ + '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \ + '-DSK_ENABLE_LEGACY_API_ALIASING=1' \ + '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \ + '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \ + '-DGR_GL_IGNORE_ES3_MSAA=0' \ + '-DSK_BUILD_FOR_ANDROID' \ + '-DSK_USE_POSIX_THREADS' \ + '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \ + '-DU_USING_ICU_NAMESPACE=0' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \ + '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \ + '-D_DEBUG' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Debug := \ + $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ + $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(LOCAL_PATH) \ + $(LOCAL_PATH)/skia/config \ + $(LOCAL_PATH)/third_party/skia/src/core \ + $(LOCAL_PATH)/third_party/skia/include/core \ + $(LOCAL_PATH)/third_party/skia/include/effects \ + $(LOCAL_PATH)/third_party/skia/include/pdf \ + $(LOCAL_PATH)/third_party/skia/include/gpu \ + $(LOCAL_PATH)/third_party/skia/include/lazy \ + $(LOCAL_PATH)/third_party/skia/include/pathops \ + $(LOCAL_PATH)/third_party/skia/include/pipe \ + $(LOCAL_PATH)/third_party/skia/include/ports \ + $(LOCAL_PATH)/third_party/skia/include/utils \ + $(LOCAL_PATH)/skia/ext \ + $(PWD)/external/icu4c/common \ + $(PWD)/external/icu4c/i18n \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Debug := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-uninitialized \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Release := \ + -fstack-protector \ + --param=ssp-buffer-size=4 \ + \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -EL \ + -mhard-float \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fstack-protector \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -Os \ + -fno-ident \ + -fdata-sections \ + -ffunction-sections \ + -fomit-frame-pointer + +MY_DEFS_Release := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-DEVENTS_IMPLEMENTATION' \ + '-DSK_ENABLE_INST_COUNT=0' \ + '-DSK_SUPPORT_GPU=1' \ + '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \ + '-DSK_ENABLE_LEGACY_API_ALIASING=1' \ + '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \ + '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \ + '-DGR_GL_IGNORE_ES3_MSAA=0' \ + '-DSK_BUILD_FOR_ANDROID' \ + '-DSK_USE_POSIX_THREADS' \ + '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \ + '-DU_USING_ICU_NAMESPACE=0' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DNDEBUG' \ + '-DNVALGRIND' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \ + '-D_FORTIFY_SOURCE=2' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Release := \ + $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ + $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(LOCAL_PATH) \ + $(LOCAL_PATH)/skia/config \ + $(LOCAL_PATH)/third_party/skia/src/core \ + $(LOCAL_PATH)/third_party/skia/include/core \ + $(LOCAL_PATH)/third_party/skia/include/effects \ + $(LOCAL_PATH)/third_party/skia/include/pdf \ + $(LOCAL_PATH)/third_party/skia/include/gpu \ + $(LOCAL_PATH)/third_party/skia/include/lazy \ + $(LOCAL_PATH)/third_party/skia/include/pathops \ + $(LOCAL_PATH)/third_party/skia/include/pipe \ + $(LOCAL_PATH)/third_party/skia/include/ports \ + $(LOCAL_PATH)/third_party/skia/include/utils \ + $(LOCAL_PATH)/skia/ext \ + $(PWD)/external/icu4c/common \ + $(PWD)/external/icu4c/i18n \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Release := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-uninitialized \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION)) +LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION)) +LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION)) +### Rules for final target. + +LOCAL_LDFLAGS_Debug := \ + -Wl,-z,now \ + -Wl,-z,relro \ + -Wl,-z,noexecstack \ + -fPIC \ + -EL \ + -Wl,--no-keep-memory \ + -nostdlib \ + -Wl,--no-undefined \ + -Wl,--exclude-libs=ALL \ + -Wl,--fatal-warnings \ + -Wl,--gc-sections \ + -Wl,--warn-shared-textrel \ + -Wl,-O1 \ + -Wl,--as-needed + + +LOCAL_LDFLAGS_Release := \ + -Wl,-z,now \ + -Wl,-z,relro \ + -Wl,-z,noexecstack \ + -fPIC \ + -EL \ + -Wl,--no-keep-memory \ + -nostdlib \ + -Wl,--no-undefined \ + -Wl,--exclude-libs=ALL \ + -Wl,-O1 \ + -Wl,--as-needed \ + -Wl,--gc-sections \ + -Wl,--fatal-warnings \ + -Wl,--warn-shared-textrel + + +LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION)) + +LOCAL_STATIC_LIBRARIES := \ + skia_skia_library_gyp + +# Enable grouping to fix circular references +LOCAL_GROUP_STATIC_LIBRARIES := true + +LOCAL_SHARED_LIBRARIES := \ + libstlport \ + libdl + +# Add target alias to "gyp_all_modules" target. +.PHONY: gyp_all_modules +gyp_all_modules: ui_events_events_gyp + +# Alias gyp target name. +.PHONY: events +events: ui_events_events_gyp + +include $(BUILD_STATIC_LIBRARY) diff --git a/ui/events/events.target.linux-x86.mk b/ui/events/events.target.linux-x86.mk new file mode 100644 index 0000000000..c6f7ecdf13 --- /dev/null +++ b/ui/events/events.target.linux-x86.mk @@ -0,0 +1,334 @@ +# This file is generated by gyp; do not edit. + +include $(CLEAR_VARS) + +LOCAL_MODULE_CLASS := STATIC_LIBRARIES +LOCAL_MODULE := ui_events_events_gyp +LOCAL_MODULE_SUFFIX := .a +LOCAL_MODULE_TAGS := optional +gyp_intermediate_dir := $(call local-intermediates-dir) +gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) + +# Make sure our deps are built first. +GYP_TARGET_DEPENDENCIES := \ + $(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \ + $(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a + +GYP_GENERATED_OUTPUTS := + +# Make sure our deps and generated files are built first. +LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS) + +LOCAL_CPP_EXTENSION := .cc +LOCAL_GENERATED_SOURCES := + +GYP_COPIED_SOURCE_ORIGIN_DIRS := + +LOCAL_SRC_FILES := \ + ui/events/event.cc \ + ui/events/event_dispatcher.cc \ + ui/events/event_handler.cc \ + ui/events/event_processor.cc \ + ui/events/event_source.cc \ + ui/events/event_target.cc \ + ui/events/event_targeter.cc \ + ui/events/event_utils.cc \ + ui/events/events_stub.cc \ + ui/events/gestures/gesture_configuration.cc \ + ui/events/gestures/gesture_point.cc \ + ui/events/gestures/gesture_recognizer_impl.cc \ + ui/events/gestures/gesture_sequence.cc \ + ui/events/gestures/gesture_types.cc \ + ui/events/gestures/gesture_util.cc \ + ui/events/gestures/velocity_calculator.cc + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Debug := \ + --param=ssp-buffer-size=4 \ + -Werror \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -m32 \ + -mmmx \ + -march=pentium4 \ + -msse2 \ + -mfpmath=sse \ + -fuse-ld=gold \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -fno-stack-protector \ + -Os \ + -g \ + -fomit-frame-pointer \ + -fdata-sections \ + -ffunction-sections + +MY_DEFS_Debug := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-DEVENTS_IMPLEMENTATION' \ + '-DSK_ENABLE_INST_COUNT=0' \ + '-DSK_SUPPORT_GPU=1' \ + '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \ + '-DSK_ENABLE_LEGACY_API_ALIASING=1' \ + '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \ + '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \ + '-DGR_GL_IGNORE_ES3_MSAA=0' \ + '-DSK_BUILD_FOR_ANDROID' \ + '-DSK_USE_POSIX_THREADS' \ + '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \ + '-DU_USING_ICU_NAMESPACE=0' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \ + '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \ + '-D_DEBUG' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Debug := \ + $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ + $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(LOCAL_PATH) \ + $(LOCAL_PATH)/skia/config \ + $(LOCAL_PATH)/third_party/skia/src/core \ + $(LOCAL_PATH)/third_party/skia/include/core \ + $(LOCAL_PATH)/third_party/skia/include/effects \ + $(LOCAL_PATH)/third_party/skia/include/pdf \ + $(LOCAL_PATH)/third_party/skia/include/gpu \ + $(LOCAL_PATH)/third_party/skia/include/lazy \ + $(LOCAL_PATH)/third_party/skia/include/pathops \ + $(LOCAL_PATH)/third_party/skia/include/pipe \ + $(LOCAL_PATH)/third_party/skia/include/ports \ + $(LOCAL_PATH)/third_party/skia/include/utils \ + $(LOCAL_PATH)/skia/ext \ + $(PWD)/external/icu4c/common \ + $(PWD)/external/icu4c/i18n \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Debug := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Release := \ + --param=ssp-buffer-size=4 \ + -Werror \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -m32 \ + -mmmx \ + -march=pentium4 \ + -msse2 \ + -mfpmath=sse \ + -fuse-ld=gold \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -fno-stack-protector \ + -Os \ + -fno-ident \ + -fdata-sections \ + -ffunction-sections \ + -fomit-frame-pointer \ + -fno-unwind-tables \ + -fno-asynchronous-unwind-tables + +MY_DEFS_Release := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-DEVENTS_IMPLEMENTATION' \ + '-DSK_ENABLE_INST_COUNT=0' \ + '-DSK_SUPPORT_GPU=1' \ + '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \ + '-DSK_ENABLE_LEGACY_API_ALIASING=1' \ + '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \ + '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \ + '-DGR_GL_IGNORE_ES3_MSAA=0' \ + '-DSK_BUILD_FOR_ANDROID' \ + '-DSK_USE_POSIX_THREADS' \ + '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \ + '-DU_USING_ICU_NAMESPACE=0' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DNDEBUG' \ + '-DNVALGRIND' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \ + '-D_FORTIFY_SOURCE=2' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Release := \ + $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ + $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(LOCAL_PATH) \ + $(LOCAL_PATH)/skia/config \ + $(LOCAL_PATH)/third_party/skia/src/core \ + $(LOCAL_PATH)/third_party/skia/include/core \ + $(LOCAL_PATH)/third_party/skia/include/effects \ + $(LOCAL_PATH)/third_party/skia/include/pdf \ + $(LOCAL_PATH)/third_party/skia/include/gpu \ + $(LOCAL_PATH)/third_party/skia/include/lazy \ + $(LOCAL_PATH)/third_party/skia/include/pathops \ + $(LOCAL_PATH)/third_party/skia/include/pipe \ + $(LOCAL_PATH)/third_party/skia/include/ports \ + $(LOCAL_PATH)/third_party/skia/include/utils \ + $(LOCAL_PATH)/skia/ext \ + $(PWD)/external/icu4c/common \ + $(PWD)/external/icu4c/i18n \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Release := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION)) +LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION)) +LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION)) +### Rules for final target. + +LOCAL_LDFLAGS_Debug := \ + -Wl,-z,now \ + -Wl,-z,relro \ + -Wl,-z,noexecstack \ + -fPIC \ + -m32 \ + -fuse-ld=gold \ + -nostdlib \ + -Wl,--no-undefined \ + -Wl,--exclude-libs=ALL \ + -Wl,--fatal-warnings \ + -Wl,--gc-sections \ + -Wl,--warn-shared-textrel \ + -Wl,-O1 \ + -Wl,--as-needed + + +LOCAL_LDFLAGS_Release := \ + -Wl,-z,now \ + -Wl,-z,relro \ + -Wl,-z,noexecstack \ + -fPIC \ + -m32 \ + -fuse-ld=gold \ + -nostdlib \ + -Wl,--no-undefined \ + -Wl,--exclude-libs=ALL \ + -Wl,-O1 \ + -Wl,--as-needed \ + -Wl,--gc-sections \ + -Wl,--fatal-warnings \ + -Wl,--warn-shared-textrel + + +LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION)) + +LOCAL_STATIC_LIBRARIES := \ + skia_skia_library_gyp + +# Enable grouping to fix circular references +LOCAL_GROUP_STATIC_LIBRARIES := true + +LOCAL_SHARED_LIBRARIES := \ + libstlport \ + libdl + +# Add target alias to "gyp_all_modules" target. +.PHONY: gyp_all_modules +gyp_all_modules: ui_events_events_gyp + +# Alias gyp target name. +.PHONY: events +events: ui_events_events_gyp + +include $(BUILD_STATIC_LIBRARY) diff --git a/ui/events/events_base.target.darwin-arm.mk b/ui/events/events_base.target.darwin-arm.mk index 5c8764c4e2..ff8ffb29f7 100644 --- a/ui/events/events_base.target.darwin-arm.mk +++ b/ui/events/events_base.target.darwin-arm.mk @@ -64,6 +64,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -73,9 +74,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DEVENTS_BASE_IMPLEMENTATION' \ '-D__STDC_CONSTANT_MACROS' \ @@ -146,6 +149,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -155,9 +159,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DEVENTS_BASE_IMPLEMENTATION' \ '-D__STDC_CONSTANT_MACROS' \ diff --git a/ui/events/events_base.target.darwin-mips.mk b/ui/events/events_base.target.darwin-mips.mk index ab430b4d38..ee2067a6ec 100644 --- a/ui/events/events_base.target.darwin-mips.mk +++ b/ui/events/events_base.target.darwin-mips.mk @@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -72,9 +73,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DEVENTS_BASE_IMPLEMENTATION' \ '-D__STDC_CONSTANT_MACROS' \ @@ -144,6 +147,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -153,9 +157,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DEVENTS_BASE_IMPLEMENTATION' \ '-D__STDC_CONSTANT_MACROS' \ diff --git a/ui/events/events_base.target.darwin-x86.mk b/ui/events/events_base.target.darwin-x86.mk index 4d9761415f..b83b0d620c 100644 --- a/ui/events/events_base.target.darwin-x86.mk +++ b/ui/events/events_base.target.darwin-x86.mk @@ -66,6 +66,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -75,9 +76,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DEVENTS_BASE_IMPLEMENTATION' \ '-D__STDC_CONSTANT_MACROS' \ @@ -151,6 +154,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -160,9 +164,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DEVENTS_BASE_IMPLEMENTATION' \ '-D__STDC_CONSTANT_MACROS' \ diff --git a/ui/events/events_base.target.linux-arm.mk b/ui/events/events_base.target.linux-arm.mk index 5c8764c4e2..ff8ffb29f7 100644 --- a/ui/events/events_base.target.linux-arm.mk +++ b/ui/events/events_base.target.linux-arm.mk @@ -64,6 +64,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -73,9 +74,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DEVENTS_BASE_IMPLEMENTATION' \ '-D__STDC_CONSTANT_MACROS' \ @@ -146,6 +149,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -155,9 +159,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DEVENTS_BASE_IMPLEMENTATION' \ '-D__STDC_CONSTANT_MACROS' \ diff --git a/ui/events/events_base.target.linux-mips.mk b/ui/events/events_base.target.linux-mips.mk index ab430b4d38..ee2067a6ec 100644 --- a/ui/events/events_base.target.linux-mips.mk +++ b/ui/events/events_base.target.linux-mips.mk @@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -72,9 +73,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DEVENTS_BASE_IMPLEMENTATION' \ '-D__STDC_CONSTANT_MACROS' \ @@ -144,6 +147,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -153,9 +157,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DEVENTS_BASE_IMPLEMENTATION' \ '-D__STDC_CONSTANT_MACROS' \ diff --git a/ui/events/events_base.target.linux-x86.mk b/ui/events/events_base.target.linux-x86.mk index 4d9761415f..b83b0d620c 100644 --- a/ui/events/events_base.target.linux-x86.mk +++ b/ui/events/events_base.target.linux-x86.mk @@ -66,6 +66,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -75,9 +76,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DEVENTS_BASE_IMPLEMENTATION' \ '-D__STDC_CONSTANT_MACROS' \ @@ -151,6 +154,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -160,9 +164,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DEVENTS_BASE_IMPLEMENTATION' \ '-D__STDC_CONSTANT_MACROS' \ diff --git a/ui/events/events_stub.cc b/ui/events/events_stub.cc index 5a7aa775ee..3d63e4ddf6 100644 --- a/ui/events/events_stub.cc +++ b/ui/events/events_stub.cc @@ -148,4 +148,9 @@ KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) { return static_cast<KeyboardCode>(0); } +const char* CodeFromNative(const base::NativeEvent& native_event) { + NOTIMPLEMENTED(); + return ""; +} + } // namespace ui diff --git a/ui/events/gestures/gesture_recognizer.h b/ui/events/gestures/gesture_recognizer.h index 88f230f614..92d225a711 100644 --- a/ui/events/gestures/gesture_recognizer.h +++ b/ui/events/gestures/gesture_recognizer.h @@ -40,10 +40,11 @@ class EVENTS_EXPORT GestureRecognizer { // Return the window which should handle this TouchEvent, in the case where // the touch is already associated with a target. // Otherwise, returns null. - virtual GestureConsumer* GetTouchLockedTarget(TouchEvent* event) = 0; + virtual GestureConsumer* GetTouchLockedTarget(const TouchEvent& event) = 0; // Return the window which should handle this GestureEvent. - virtual GestureConsumer* GetTargetForGestureEvent(GestureEvent* event) = 0; + virtual GestureConsumer* GetTargetForGestureEvent( + const GestureEvent& event) = 0; // If there is an active touch within // GestureConfiguration::max_separation_for_gesture_touches_in_pixels, diff --git a/ui/events/gestures/gesture_recognizer_impl.cc b/ui/events/gestures/gesture_recognizer_impl.cc index 50a159b658..4a599345c8 100644 --- a/ui/events/gestures/gesture_recognizer_impl.cc +++ b/ui/events/gestures/gesture_recognizer_impl.cc @@ -65,14 +65,14 @@ GestureRecognizerImpl::~GestureRecognizerImpl() { // Checks if this finger is already down, if so, returns the current target. // Otherwise, returns NULL. GestureConsumer* GestureRecognizerImpl::GetTouchLockedTarget( - TouchEvent* event) { - return touch_id_target_[event->touch_id()]; + const TouchEvent& event) { + return touch_id_target_[event.touch_id()]; } GestureConsumer* GestureRecognizerImpl::GetTargetForGestureEvent( - GestureEvent* event) { + const GestureEvent& event) { GestureConsumer* target = NULL; - int touch_id = event->GetLowestTouchId(); + int touch_id = event.GetLowestTouchId(); target = touch_id_target_for_gestures_[touch_id]; return target; } @@ -185,7 +185,7 @@ void GestureRecognizerImpl::SetupTargets(const TouchEvent& event, if (event.type() == ui::ET_TOUCH_RELEASED || event.type() == ui::ET_TOUCH_CANCELLED) { touch_id_target_.erase(event.touch_id()); - } else { + } else if (event.type() == ui::ET_TOUCH_PRESSED) { touch_id_target_[event.touch_id()] = target; if (target) touch_id_target_for_gestures_[event.touch_id()] = target; @@ -239,7 +239,7 @@ void GestureRecognizerImpl::RemoveGestureEventHelper( } void GestureRecognizerImpl::DispatchPostponedGestureEvent(GestureEvent* event) { - GestureConsumer* consumer = GetTargetForGestureEvent(event); + GestureConsumer* consumer = GetTargetForGestureEvent(*event); if (consumer) { GestureEventHelper* helper = FindDispatchHelperForConsumer(consumer); if (helper) diff --git a/ui/events/gestures/gesture_recognizer_impl.h b/ui/events/gestures/gesture_recognizer_impl.h index 6e45c1376b..59c92cfb4a 100644 --- a/ui/events/gestures/gesture_recognizer_impl.h +++ b/ui/events/gestures/gesture_recognizer_impl.h @@ -34,9 +34,10 @@ class EVENTS_EXPORT GestureRecognizerImpl : public GestureRecognizer, std::vector<GestureEventHelper*>& helpers() { return helpers_; } // Overridden from GestureRecognizer - virtual GestureConsumer* GetTouchLockedTarget(TouchEvent* event) OVERRIDE; + virtual GestureConsumer* GetTouchLockedTarget( + const TouchEvent& event) OVERRIDE; virtual GestureConsumer* GetTargetForGestureEvent( - GestureEvent* event) OVERRIDE; + const GestureEvent& event) OVERRIDE; virtual GestureConsumer* GetTargetForLocation( const gfx::Point& location) OVERRIDE; virtual void TransferEventsTo(GestureConsumer* current_consumer, diff --git a/ui/events/keycodes/keyboard_code_conversion_mac.h b/ui/events/keycodes/keyboard_code_conversion_mac.h index d74c57948b..719c922d13 100644 --- a/ui/events/keycodes/keyboard_code_conversion_mac.h +++ b/ui/events/keycodes/keyboard_code_conversion_mac.h @@ -37,6 +37,8 @@ EVENTS_BASE_EXPORT int MacKeyCodeForWindowsKeyCode( // has a different notion of key codes. EVENTS_BASE_EXPORT KeyboardCode KeyboardCodeFromNSEvent(NSEvent* event); +EVENTS_BASE_EXPORT const char* CodeFromNSEvent(NSEvent* event); + } // namespace ui #endif // UI_EVENTS_KEYCODES_KEYBOARD_CODE_CONVERSION_MAC_H_ diff --git a/ui/events/keycodes/keyboard_code_conversion_mac.mm b/ui/events/keycodes/keyboard_code_conversion_mac.mm index ed50392f84..fdda790be1 100644 --- a/ui/events/keycodes/keyboard_code_conversion_mac.mm +++ b/ui/events/keycodes/keyboard_code_conversion_mac.mm @@ -9,6 +9,7 @@ #import <Carbon/Carbon.h> #include "base/logging.h" +#include "ui/events/keycodes/dom4/keycode_converter.h" namespace ui { @@ -555,4 +556,9 @@ KeyboardCode KeyboardCodeFromNSEvent(NSEvent* event) { return KeyboardCodeFromKeyCode([event keyCode]); } +const char* CodeFromNSEvent(NSEvent* event) { + return KeycodeConverter::GetInstance()->NativeKeycodeToCode( + [event keyCode]); +} + } // namespace ui diff --git a/ui/events/keycodes/keyboard_code_conversion_win.cc b/ui/events/keycodes/keyboard_code_conversion_win.cc index 66eeaa75dc..ebb54388b8 100644 --- a/ui/events/keycodes/keyboard_code_conversion_win.cc +++ b/ui/events/keycodes/keyboard_code_conversion_win.cc @@ -3,6 +3,7 @@ // found in the LICENSE file. #include "ui/events/keycodes/keyboard_code_conversion_win.h" +#include "ui/events/keycodes/dom4/keycode_converter.h" namespace ui { @@ -14,4 +15,9 @@ KeyboardCode KeyboardCodeForWindowsKeyCode(WORD keycode) { return static_cast<KeyboardCode>(keycode); } +const char* CodeForWindowsScanCode(WORD scan_code) { + return KeycodeConverter::GetInstance()->NativeKeycodeToCode( + scan_code); +} + } // namespace ui diff --git a/ui/events/keycodes/keyboard_code_conversion_win.h b/ui/events/keycodes/keyboard_code_conversion_win.h index 1883c8d2c0..4f09a2ac9a 100644 --- a/ui/events/keycodes/keyboard_code_conversion_win.h +++ b/ui/events/keycodes/keyboard_code_conversion_win.h @@ -13,6 +13,7 @@ namespace ui { // Methods to convert ui::KeyboardCode/Windows virtual key type methods. EVENTS_BASE_EXPORT WORD WindowsKeyCodeForKeyboardCode(KeyboardCode keycode); EVENTS_BASE_EXPORT KeyboardCode KeyboardCodeForWindowsKeyCode(WORD keycode); +EVENTS_BASE_EXPORT const char* CodeForWindowsScanCode(WORD scan_code); } // namespace ui diff --git a/ui/events/keycodes/keyboard_code_conversion_x.cc b/ui/events/keycodes/keyboard_code_conversion_x.cc index 8b88e39395..821f8c4701 100644 --- a/ui/events/keycodes/keyboard_code_conversion_x.cc +++ b/ui/events/keycodes/keyboard_code_conversion_x.cc @@ -14,6 +14,7 @@ #include "base/logging.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" +#include "ui/events/keycodes/dom4/keycode_converter.h" namespace ui { @@ -284,6 +285,8 @@ KeyboardCode KeyboardCodeFromXKeysym(unsigned int keysym) { return VKEY_MENU; case XK_ISO_Level3_Shift: return VKEY_ALTGR; + case XK_Multi_key: + return VKEY_COMPOSE; case XK_Pause: return VKEY_PAUSE; case XK_Caps_Lock: @@ -437,12 +440,17 @@ KeyboardCode KeyboardCodeFromXKeysym(unsigned int keysym) { return VKEY_UNKNOWN; } +const char* CodeFromXEvent(XEvent* xev) { + return KeycodeConverter::GetInstance()->NativeKeycodeToCode( + xev->xkey.keycode); +} + uint16 GetCharacterFromXEvent(XEvent* xev) { char buf[6]; int bytes_written = XLookupString(&xev->xkey, buf, 6, NULL, NULL); DCHECK_LE(bytes_written, 6); - string16 result; + base::string16 result; return (bytes_written > 0 && UTF8ToUTF16(buf, bytes_written, &result) && result.length() == 1) ? result[0] : 0; } @@ -586,6 +594,8 @@ int XKeysymForWindowsKeyCode(KeyboardCode keycode, bool shift) { return XK_Menu; case VKEY_ALTGR: return XK_ISO_Level3_Shift; + case VKEY_COMPOSE: + return XK_Multi_key; case VKEY_PAUSE: return XK_Pause; diff --git a/ui/events/keycodes/keyboard_code_conversion_x.h b/ui/events/keycodes/keyboard_code_conversion_x.h index bd8e9caa7f..b5d8fe87c3 100644 --- a/ui/events/keycodes/keyboard_code_conversion_x.h +++ b/ui/events/keycodes/keyboard_code_conversion_x.h @@ -17,6 +17,8 @@ EVENTS_BASE_EXPORT KeyboardCode KeyboardCodeFromXKeyEvent(XEvent* xev); EVENTS_BASE_EXPORT KeyboardCode KeyboardCodeFromXKeysym(unsigned int keysym); +EVENTS_BASE_EXPORT const char* CodeFromXEvent(XEvent* xev); + // Returns a character on a standard US PC keyboard from an XEvent. EVENTS_BASE_EXPORT uint16 GetCharacterFromXEvent(XEvent* xev); diff --git a/ui/events/keycodes/keyboard_codes_posix.h b/ui/events/keycodes/keyboard_codes_posix.h index 1f7e06f96b..e984839d15 100644 --- a/ui/events/keycodes/keyboard_codes_posix.h +++ b/ui/events/keycodes/keyboard_codes_posix.h @@ -221,6 +221,11 @@ enum KeyboardCode { // (VK_OEM_AX) code to represent AltGr, matching the behaviour of Firefox on // Linux. VKEY_ALTGR = 0xE1, +#if defined(USE_X11) + // Windows does not have a specific key code for Compose. We use the unused + // 0xE6 (VK_ICO_CLEAR) code to represent Compose. + VKEY_COMPOSE = 0xE6, +#endif }; } // namespace ui diff --git a/ui/events/latency_info.cc b/ui/events/latency_info.cc index b75af66ed7..99729995bd 100644 --- a/ui/events/latency_info.cc +++ b/ui/events/latency_info.cc @@ -21,10 +21,14 @@ const char* GetComponentName(ui::LatencyComponentType type) { CASE_TYPE(INPUT_EVENT_LATENCY_UI_COMPONENT); CASE_TYPE(INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_COMPONENT); CASE_TYPE(INPUT_EVENT_LATENCY_ACKED_TOUCH_COMPONENT); + CASE_TYPE(WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT); CASE_TYPE(INPUT_EVENT_LATENCY_TERMINATED_MOUSE_COMPONENT); CASE_TYPE(INPUT_EVENT_LATENCY_TERMINATED_TOUCH_COMPONENT); CASE_TYPE(INPUT_EVENT_LATENCY_TERMINATED_GESTURE_COMPONENT); CASE_TYPE(INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT); + CASE_TYPE(INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT); + CASE_TYPE(INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT); + CASE_TYPE(LATENCY_INFO_LIST_TERMINATED_OVERFLOW_COMPONENT); default: DLOG(WARNING) << "Unhandled LatencyComponentType.\n"; break; @@ -39,6 +43,9 @@ bool IsTerminalComponent(ui::LatencyComponentType type) { case ui::INPUT_EVENT_LATENCY_TERMINATED_TOUCH_COMPONENT: case ui::INPUT_EVENT_LATENCY_TERMINATED_GESTURE_COMPONENT: case ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT: + case ui::INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT: + case ui::INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT: + case ui::LATENCY_INFO_LIST_TERMINATED_OVERFLOW_COMPONENT: return true; default: return false; @@ -155,8 +162,7 @@ void LatencyInfo::AddLatencyNumberWithTimestamp(LatencyComponentType component, bool dump_to_trace) { if (dump_to_trace && IsBeginComponent(component)) { // Should only ever add begin component once. - // Put the CHECK back once crbug.com/321116 is resolved. - // CHECK_EQ(-1, trace_id); + CHECK_EQ(-1, trace_id); trace_id = component_sequence_number; TRACE_EVENT_ASYNC_BEGIN0("benchmark", "InputLatency", diff --git a/ui/events/latency_info.h b/ui/events/latency_info.h index ea3293cb37..7b70654362 100644 --- a/ui/events/latency_info.h +++ b/ui/events/latency_info.h @@ -38,6 +38,9 @@ enum LatencyComponentType { INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_COMPONENT, // Timestamp when the touch event is acked. INPUT_EVENT_LATENCY_ACKED_TOUCH_COMPONENT, + // Frame number when a window snapshot was requested. The snapshot + // is taken when the rendering results actually reach the screen. + WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT, // ---------------------------TERMINAL COMPONENT----------------------------- // TERMINAL COMPONENT is when we show the latency end in chrome://tracing. // Timestamp when the mouse event is acked from renderer and it does not @@ -52,9 +55,15 @@ enum LatencyComponentType { // Timestamp when the frame is swapped (i.e. when the rendering caused by // input event actually takes effect). INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, - // Frame number when a window snapshot was requested. The snapshot - // is taken when the rendering results actually reach the screen. - WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT + // This component indicates that the input causes a commit to be scheduled + // but the commit failed. + INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT, + // This component indicates that the input causes a swap to be scheduled + // but the swap failed. + INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT, + // This component indicates that the cached LatencyInfo number exceeds the + // maximal allowed size. + LATENCY_INFO_LIST_TERMINATED_OVERFLOW_COMPONENT, }; struct EVENTS_BASE_EXPORT LatencyInfo { diff --git a/ui/events/ozone/events_ozone.cc b/ui/events/ozone/events_ozone.cc index 0db40f48a2..4655d41192 100644 --- a/ui/events/ozone/events_ozone.cc +++ b/ui/events/ozone/events_ozone.cc @@ -52,6 +52,12 @@ KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) { return event->key_code(); } +const char* CodeFromNative(const base::NativeEvent& native_event) { + const ui::KeyEvent* event = static_cast<const ui::KeyEvent*>(native_event); + DCHECK(event->IsKeyEvent()); + return event->code().c_str(); +} + bool IsMouseEvent(const base::NativeEvent& native_event) { const ui::Event* e = static_cast<const ui::Event*>(native_event); return e->IsMouseEvent(); diff --git a/ui/events/test/events_test_utils_x11.cc b/ui/events/test/events_test_utils_x11.cc index 9b2cc5bbd1..210216b47e 100644 --- a/ui/events/test/events_test_utils_x11.cc +++ b/ui/events/test/events_test_utils_x11.cc @@ -16,24 +16,6 @@ namespace { -const int kScrollValuatorNum = 5; -const int kScrollValuatorMap[kScrollValuatorNum][4] = { - // { valuator_index, valuator_type, min_val, max_val } - { 0, ui::DeviceDataManager::DT_CMT_SCROLL_X, -100, 100 }, - { 1, ui::DeviceDataManager::DT_CMT_SCROLL_Y, -100, 100 }, - { 2, ui::DeviceDataManager::DT_CMT_ORDINAL_X, -100, 100 }, - { 3, ui::DeviceDataManager::DT_CMT_ORDINAL_Y, -100, 100 }, - { 4, ui::DeviceDataManager::DT_CMT_FINGER_COUNT, 0, 3}, -}; - -const int kTouchValuatorNum = 3; -const int kTouchValuatorMap[kTouchValuatorNum][4] = { - // { valuator_index, valuator_type, min_val, max_val } - { 0, ui::DeviceDataManager::DT_TOUCH_MAJOR, 0, 1000}, - { 1, ui::DeviceDataManager::DT_TOUCH_ORIENTATION, 0, 1}, - { 2, ui::DeviceDataManager::DT_TOUCH_PRESSURE, 0, 1000}, -}; - // Converts ui::EventType to state for X*Events. unsigned int XEventState(int flags) { return @@ -104,7 +86,8 @@ unsigned int XButtonEventButton(ui::EventType type, return 0; } -void InitValuatorsForXIDeviceEvent(XIDeviceEvent* xiev, int valuator_count) { +void InitValuatorsForXIDeviceEvent(XIDeviceEvent* xiev) { + int valuator_count = ui::DeviceDataManager::DT_LAST_ENTRY; xiev->valuators.mask_len = (valuator_count / 8) + 1; xiev->valuators.mask = new unsigned char[xiev->valuators.mask_len]; memset(xiev->valuators.mask, 0, xiev->valuators.mask_len); @@ -204,18 +187,38 @@ void ScopedXI2Event::InitScrollEvent(int deviceid, int y_offset_ordinal, int finger_count) { Cleanup(); + event_.reset(CreateXInput2Event(deviceid, XI_Motion, 0, gfx::Point())); + + Valuator valuators[] = { + Valuator(DeviceDataManager::DT_CMT_SCROLL_X, x_offset), + Valuator(DeviceDataManager::DT_CMT_SCROLL_Y, y_offset), + Valuator(DeviceDataManager::DT_CMT_ORDINAL_X, x_offset_ordinal), + Valuator(DeviceDataManager::DT_CMT_ORDINAL_Y, y_offset_ordinal), + Valuator(DeviceDataManager::DT_CMT_FINGER_COUNT, finger_count) + }; + SetUpValuators( + std::vector<Valuator>(valuators, valuators + arraysize(valuators))); +} + +void ScopedXI2Event::InitFlingScrollEvent(int deviceid, + int x_velocity, + int y_velocity, + int x_velocity_ordinal, + int y_velocity_ordinal, + bool is_cancel) { + Cleanup(); event_.reset(CreateXInput2Event(deviceid, XI_Motion, deviceid, gfx::Point())); - int valuator_data[kScrollValuatorNum] = - { x_offset, y_offset, x_offset_ordinal, y_offset_ordinal, finger_count}; - XIDeviceEvent* xiev = - static_cast<XIDeviceEvent*>(event_->xcookie.data); + Valuator valuators[] = { + Valuator(DeviceDataManager::DT_CMT_FLING_STATE, is_cancel ? 1 : 0), + Valuator(DeviceDataManager::DT_CMT_FLING_Y, y_velocity), + Valuator(DeviceDataManager::DT_CMT_ORDINAL_Y, y_velocity_ordinal), + Valuator(DeviceDataManager::DT_CMT_FLING_X, x_velocity), + Valuator(DeviceDataManager::DT_CMT_ORDINAL_X, x_velocity_ordinal) + }; - InitValuatorsForXIDeviceEvent(xiev, kScrollValuatorNum); - for(int i = 0; i < kScrollValuatorNum; i++) { - XISetMask(xiev->valuators.mask, i); - xiev->valuators.values[i] = valuator_data[i]; - } + SetUpValuators( + std::vector<Valuator>(valuators, valuators + arraysize(valuators))); } void ScopedXI2Event::InitTouchEvent(int deviceid, @@ -224,22 +227,8 @@ void ScopedXI2Event::InitTouchEvent(int deviceid, const gfx::Point& location, const std::vector<Valuator>& valuators) { Cleanup(); - event_.reset(CreateXInput2Event( - deviceid, evtype, tracking_id, location)); - - XIDeviceEvent* xiev = - static_cast<XIDeviceEvent*>(event_->xcookie.data); - InitValuatorsForXIDeviceEvent(xiev, valuators.size()); - int val_count = 0; - for (int i = 0; i < kTouchValuatorNum; i++) { - for (size_t j = 0; j < valuators.size(); j++) { - if (valuators[j].data_type == kTouchValuatorMap[i][1]) { - XISetMask(xiev->valuators.mask, kTouchValuatorMap[i][0]); - xiev->valuators.values[val_count++] = valuators[j].value; - } - } - } - + event_.reset(CreateXInput2Event(deviceid, evtype, tracking_id, location)); + SetUpValuators(valuators); } void ScopedXI2Event::Cleanup() { @@ -255,39 +244,31 @@ void ScopedXI2Event::Cleanup() { event_.reset(); } - void SetUpScrollDeviceForTest(unsigned int deviceid) { +void ScopedXI2Event::SetUpValuators(const std::vector<Valuator>& valuators) { + CHECK(event_.get()); + CHECK_EQ(GenericEvent, event_->type); + XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(event_->xcookie.data); + InitValuatorsForXIDeviceEvent(xiev); + ui::DeviceDataManager* manager = ui::DeviceDataManager::GetInstance(); + for (size_t i = 0; i < valuators.size(); ++i) { + manager->SetValuatorDataForTest(xiev, valuators[i].data_type, + valuators[i].value); + } +} + +void SetUpScrollDeviceForTest(unsigned int deviceid) { std::vector<unsigned int> device_list; device_list.push_back(deviceid); TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); ui::DeviceDataManager* manager = ui::DeviceDataManager::GetInstance(); - manager->SetDeviceListForTest(device_list, device_list, device_list); - - for (int i = 0; i < kScrollValuatorNum; i++) { - manager->SetDeviceValuatorForTest( - deviceid, - kScrollValuatorMap[i][0], - static_cast<DeviceDataManager::DataType>(kScrollValuatorMap[i][1]), - kScrollValuatorMap[i][2], - kScrollValuatorMap[i][3]); - } + manager->SetDeviceListForTest(std::vector<unsigned int>(), device_list); } -void SetupTouchDevicesForTest(const std::vector<unsigned int>& devices) { - std::vector<unsigned int> empty_list; +void SetUpTouchDevicesForTest(const std::vector<unsigned int>& devices) { TouchFactory::GetInstance()->SetTouchDeviceForTest(devices); ui::DeviceDataManager* manager = ui::DeviceDataManager::GetInstance(); - manager->SetDeviceListForTest(devices, empty_list, empty_list); - for (size_t i = 0; i < devices.size(); i++) { - for (int j = 0; j < kTouchValuatorNum; j++) { - manager->SetDeviceValuatorForTest( - devices[i], - kTouchValuatorMap[j][0], - static_cast<DeviceDataManager::DataType>(kTouchValuatorMap[j][1]), - kTouchValuatorMap[j][2], - kTouchValuatorMap[j][3]); - } - } + manager->SetDeviceListForTest(devices, std::vector<unsigned int>()); } } // namespace ui diff --git a/ui/events/test/events_test_utils_x11.h b/ui/events/test/events_test_utils_x11.h index 4faa8f49c4..5f59dd5232 100644 --- a/ui/events/test/events_test_utils_x11.h +++ b/ui/events/test/events_test_utils_x11.h @@ -51,6 +51,13 @@ class ScopedXI2Event { int y_offset_ordinal, int finger_count); + void InitFlingScrollEvent(int deviceid, + int x_velocity, + int y_velocity, + int x_velocity_ordinal, + int y_velocity_ordinal, + bool is_cancel); + void InitTouchEvent(int deviceid, int evtype, int tracking_id, @@ -60,6 +67,8 @@ class ScopedXI2Event { private: void Cleanup(); + void SetUpValuators(const std::vector<Valuator>& valuators); + scoped_ptr<XEvent> event_; DISALLOW_COPY_AND_ASSIGN(ScopedXI2Event); @@ -69,7 +78,7 @@ class ScopedXI2Event { void SetUpScrollDeviceForTest(unsigned int deviceid); // Initializes a list of touchscreen devices for touch events. -void SetupTouchDevicesForTest(const std::vector<unsigned int>& devices); +void SetUpTouchDevicesForTest(const std::vector<unsigned int>& devices); } // namespace ui diff --git a/ui/events/test/events_unittests.cc b/ui/events/test/run_all_unittests.cc index c9885e736c..dab855c9d3 100644 --- a/ui/events/test/events_unittests.cc +++ b/ui/events/test/run_all_unittests.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Copyright 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. diff --git a/ui/events/test/test_event_processor.cc b/ui/events/test/test_event_processor.cc new file mode 100644 index 0000000000..995912831f --- /dev/null +++ b/ui/events/test/test_event_processor.cc @@ -0,0 +1,32 @@ +// Copyright 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. + +#include "ui/events/test/test_event_processor.h" + +#include "ui/events/event_target.h" + +namespace ui { +namespace test { + +TestEventProcessor::TestEventProcessor() {} +TestEventProcessor::~TestEventProcessor() {} + +void TestEventProcessor::SetRoot(scoped_ptr<EventTarget> root) { + root_ = root.Pass(); +} + +bool TestEventProcessor::CanDispatchToTarget(EventTarget* target) { + return true; +} + +EventTarget* TestEventProcessor::GetRootTarget() { + return root_.get(); +} + +EventDispatchDetails TestEventProcessor::OnEventFromSource(Event* event) { + return EventProcessor::OnEventFromSource(event); +} + +} // namespace test +} // namespace ui diff --git a/ui/events/test/test_event_processor.h b/ui/events/test/test_event_processor.h new file mode 100644 index 0000000000..e9ba0963d5 --- /dev/null +++ b/ui/events/test/test_event_processor.h @@ -0,0 +1,35 @@ +// Copyright 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. + +#ifndef UI_EVENTS_TEST_TEST_EVENT_PROCESSOR_H_ +#define UI_EVENTS_TEST_TEST_EVENT_PROCESSOR_H_ + +#include "base/memory/scoped_ptr.h" +#include "ui/events/event_processor.h" + +namespace ui { +namespace test { + +class TestEventProcessor : public EventProcessor { + public: + TestEventProcessor(); + virtual ~TestEventProcessor(); + + void SetRoot(scoped_ptr<EventTarget> root); + + // EventProcessor: + virtual bool CanDispatchToTarget(EventTarget* target) OVERRIDE; + virtual EventTarget* GetRootTarget() OVERRIDE; + virtual EventDispatchDetails OnEventFromSource(Event* event) OVERRIDE; + + private: + scoped_ptr<EventTarget> root_; + + DISALLOW_COPY_AND_ASSIGN(TestEventProcessor); +}; + +} // namespace test +} // namespace ui + +#endif // UI_EVENTS_TEST_TEST_EVENT_PROCESSOR_H_ diff --git a/ui/events/test/test_event_target.cc b/ui/events/test/test_event_target.cc new file mode 100644 index 0000000000..68d2eb2d67 --- /dev/null +++ b/ui/events/test/test_event_target.cc @@ -0,0 +1,87 @@ +// Copyright 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. + +#include "ui/events/test/test_event_target.h" + +#include "ui/events/event.h" +#include "ui/events/event_target_iterator.h" +#include "ui/events/event_targeter.h" + +namespace ui { +namespace test { + +TestEventTarget::TestEventTarget() + : parent_(NULL) {} +TestEventTarget::~TestEventTarget() {} + +void TestEventTarget::AddChild(scoped_ptr<TestEventTarget> child) { + TestEventTarget* child_r = child.get(); + if (child->parent()) { + AddChild(child->parent()->RemoveChild(child.release())); + } else { + children_.push_back(child.release()); + } + child_r->set_parent(this); +} + +scoped_ptr<TestEventTarget> TestEventTarget::RemoveChild(TestEventTarget *c) { + ScopedVector<TestEventTarget>::iterator iter = std::find(children_.begin(), + children_.end(), + c); + if (iter != children_.end()) { + children_.weak_erase(iter); + c->set_parent(NULL); + return scoped_ptr<TestEventTarget>(c); + } + return scoped_ptr<TestEventTarget>(); +} + +void TestEventTarget::SetEventTargeter(scoped_ptr<EventTargeter> targeter) { + targeter_ = targeter.Pass(); +} + +bool TestEventTarget::DidReceiveEvent(ui::EventType type) const { + return received_.count(type) > 0; +} + +void TestEventTarget::ResetReceivedEvents() { + received_.clear(); +} + +//////////////////////////////////////////////////////////////////////////////// +// TestEventTarget, protected + +bool TestEventTarget::CanAcceptEvent(const ui::Event& event) { + return true; +} + +EventTarget* TestEventTarget::GetParentTarget() { + return parent_; +} + +scoped_ptr<EventTargetIterator> TestEventTarget::GetChildIterator() const { + return scoped_ptr<EventTargetIterator>( + new EventTargetIteratorImpl<TestEventTarget>(children_.get())); +} + +EventTargeter* TestEventTarget::GetEventTargeter() { + return targeter_.get(); +} + +void TestEventTarget::OnEvent(Event* event) { + received_.insert(event->type()); + EventTarget::OnEvent(event); +} + +//////////////////////////////////////////////////////////////////////////////// +// TestEventTarget, private + +bool TestEventTarget::Contains(TestEventTarget* target) const { + while (target && target != this) + target = target->parent(); + return target == this; +} + +} // namespace test +} // namespace ui diff --git a/ui/events/test/test_event_target.h b/ui/events/test/test_event_target.h new file mode 100644 index 0000000000..43994ffd5b --- /dev/null +++ b/ui/events/test/test_event_target.h @@ -0,0 +1,65 @@ +// Copyright 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. + +#ifndef UI_EVENTS_TEST_TEST_EVENT_TARGET_H_ +#define UI_EVENTS_TEST_TEST_EVENT_TARGET_H_ + +#include <set> + +#include "base/memory/scoped_vector.h" +#include "ui/events/event_target.h" + +namespace gfx { +class Point; +} + +namespace ui { +namespace test { + +class TestEventTarget : public EventTarget { + public: + TestEventTarget(); + virtual ~TestEventTarget(); + + void AddChild(scoped_ptr<TestEventTarget> child); + scoped_ptr<TestEventTarget> RemoveChild(TestEventTarget* child); + + TestEventTarget* parent() { return parent_; } + + TestEventTarget* child_at(int index) { return children_[index]; } + size_t child_count() const { return children_.size(); } + + void SetEventTargeter(scoped_ptr<EventTargeter> targeter); + + bool DidReceiveEvent(ui::EventType type) const; + void ResetReceivedEvents(); + + protected: + bool Contains(TestEventTarget* target) const; + + // EventTarget: + virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE; + virtual EventTarget* GetParentTarget() OVERRIDE; + virtual scoped_ptr<EventTargetIterator> GetChildIterator() const OVERRIDE; + virtual EventTargeter* GetEventTargeter() OVERRIDE; + + // EventHandler: + virtual void OnEvent(Event* event) OVERRIDE; + + private: + void set_parent(TestEventTarget* parent) { parent_ = parent; } + + TestEventTarget* parent_; + ScopedVector<TestEventTarget> children_; + scoped_ptr<EventTargeter> targeter_; + + std::set<ui::EventType> received_; + + DISALLOW_COPY_AND_ASSIGN(TestEventTarget); +}; + +} // namespace test +} // namespace ui + +#endif // UI_EVENTS_TEST_TEST_EVENT_TARGET_H_ diff --git a/ui/events/win/events_win.cc b/ui/events/win/events_win.cc index 04b9cd058a..67f0213ca3 100644 --- a/ui/events/win/events_win.cc +++ b/ui/events/win/events_win.cc @@ -228,6 +228,11 @@ KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) { return KeyboardCodeForWindowsKeyCode(native_event.wParam); } +const char* CodeFromNative(const base::NativeEvent& native_event) { + const uint16 scan_code = GetScanCodeFromLParam(native_event.lParam); + return CodeForWindowsScanCode(scan_code); +} + bool IsMouseEvent(const base::NativeEvent& native_event) { return IsClientMouseEvent(native_event) || IsNonClientMouseEvent(native_event); @@ -369,4 +374,28 @@ bool IsMouseEventFromTouch(UINT message) { MOUSEEVENTF_FROMTOUCH; } +// Conversion scan_code and LParam each other. +// uint16 scan_code: +// ui/events/keycodes/dom4/keycode_converter_data.h +// 0 - 15bits: represetns the scan code. +// 28 - 30 bits (0xE000): represents whether this is an extended key or not. +// +// LPARAM lParam: +// http://msdn.microsoft.com/en-us/library/windows/desktop/ms644984.aspx +// 16 - 23bits: represetns the scan code. +// 24bit (0x0100): represents whether this is an extended key or not. +uint16 GetScanCodeFromLParam(LPARAM l_param) { + uint16 scan_code = ((l_param >> 16) & 0x00FF); + if (l_param & (1 << 24)) + scan_code |= 0xE000; + return scan_code; +} + +LPARAM GetLParamFromScanCode(uint16 scan_code) { + LPARAM l_param = static_cast<LPARAM>(scan_code & 0x00FF) << 16; + if ((scan_code & 0xE000) == 0xE000) + l_param |= (1 << 24); + return l_param; +} + } // namespace ui diff --git a/ui/events/x/device_data_manager.cc b/ui/events/x/device_data_manager.cc index 12dfb0c834..a2e02928c4 100644 --- a/ui/events/x/device_data_manager.cc +++ b/ui/events/x/device_data_manager.cc @@ -582,9 +582,8 @@ bool DeviceDataManager::GetDataRange(unsigned int deviceid, } void DeviceDataManager::SetDeviceListForTest( - const std::vector<unsigned int>& devices, - const std::vector<unsigned int>& cmt_devices, - const std::vector<unsigned int>& touchpads) { + const std::vector<unsigned int>& touchscreen, + const std::vector<unsigned int>& cmt_devices) { for (int i = 0; i < kMaxDeviceNum; ++i) { valuator_count_[i] = 0; valuator_lookup_[i].clear(); @@ -595,44 +594,59 @@ void DeviceDataManager::SetDeviceListForTest( last_seen_valuator_[i][j].clear(); } - for (size_t i = 0; i < devices.size(); i++) { - unsigned int deviceid = devices[i]; - valuator_lookup_[deviceid].resize(DT_LAST_ENTRY, -1); - data_type_lookup_[deviceid].resize(DT_LAST_ENTRY, DT_LAST_ENTRY); - valuator_min_[deviceid].resize(DT_LAST_ENTRY, 0); - valuator_max_[deviceid].resize(DT_LAST_ENTRY, 0); - for (int j = 0; j < kMaxSlotNum; j++) - last_seen_valuator_[deviceid][j].resize(DT_LAST_ENTRY, 0); + for (size_t i = 0; i < touchscreen.size(); i++) { + unsigned int deviceid = touchscreen[i]; + InitializeValuatorsForTest(deviceid, kTouchDataTypeStart, kTouchDataTypeEnd, + 0, 1000); } cmt_devices_.reset(); for (size_t i = 0; i < cmt_devices.size(); ++i) { - unsigned int deviceid = devices[i]; + unsigned int deviceid = cmt_devices[i]; cmt_devices_[deviceid] = true; + touchpads_[deviceid] = true; + InitializeValuatorsForTest(deviceid, kCMTDataTypeStart, kCMTDataTypeEnd, + -1000, 1000); } +} - touchpads_.reset(); - for (size_t i = 0; i < touchpads.size(); ++i) { - unsigned int deviceid = devices[i]; - touchpads_[deviceid] = true; +void DeviceDataManager::SetValuatorDataForTest(XIDeviceEvent* xievent, + DataType type, + double value) { + int index = valuator_lookup_[xievent->deviceid][type]; + CHECK(!XIMaskIsSet(xievent->valuators.mask, index)); + CHECK(index >= 0 && index < valuator_count_[xievent->deviceid]); + XISetMask(xievent->valuators.mask, index); + + double* valuators = xievent->valuators.values; + for (int i = 0; i < index; ++i) { + if (XIMaskIsSet(xievent->valuators.mask, i)) + valuators++; } + for (int i = DT_LAST_ENTRY - 1; i > valuators - xievent->valuators.values; + --i) + xievent->valuators.values[i] = xievent->valuators.values[i - 1]; + *valuators = value; } -void DeviceDataManager::SetDeviceValuatorForTest(int deviceid, - int val_index, - DataType data_type, - double min, - double max) { - valuator_lookup_[deviceid][data_type] = val_index; - data_type_lookup_[deviceid][val_index] = data_type; - valuator_min_[deviceid][data_type] = min; - valuator_max_[deviceid][data_type] = max; - - // Recalulate the number of valuators for the device. - valuator_count_[deviceid] = 0; - for (size_t i = 0; i < DT_LAST_ENTRY; ++i) { - if (valuator_lookup_[deviceid][i] != -1) - valuator_count_[deviceid]++; +void DeviceDataManager::InitializeValuatorsForTest(int deviceid, + int start_valuator, + int end_valuator, + double min_value, + double max_value) { + valuator_lookup_[deviceid].resize(DT_LAST_ENTRY, -1); + data_type_lookup_[deviceid].resize(DT_LAST_ENTRY, DT_LAST_ENTRY); + valuator_min_[deviceid].resize(DT_LAST_ENTRY, 0); + valuator_max_[deviceid].resize(DT_LAST_ENTRY, 0); + for (int j = 0; j < kMaxSlotNum; j++) + last_seen_valuator_[deviceid][j].resize(DT_LAST_ENTRY, 0); + for (int j = start_valuator; j <= end_valuator; ++j) { + valuator_lookup_[deviceid][j] = valuator_count_[deviceid]; + data_type_lookup_[deviceid][valuator_count_[deviceid]] = j; + valuator_min_[deviceid][j] = min_value; + valuator_max_[deviceid][j] = max_value; + valuator_count_[deviceid]++; } } + } // namespace ui diff --git a/ui/events/x/device_data_manager.h b/ui/events/x/device_data_manager.h index 62a95f88ef..aff0649357 100644 --- a/ui/events/x/device_data_manager.h +++ b/ui/events/x/device_data_manager.h @@ -215,23 +215,17 @@ class EVENTS_BASE_EXPORT DeviceDataManager { double* min, double* max); - // Setups relevant valuator informations for device ids in the list |devices|. + // Sets up relevant valuator informations for device ids in the device lists. // This function is only for test purpose. It does not query the X server for // the actual device info, but rather inits the relevant valuator structures - // to have safe default values for testing. |cmt_devices| and |touchpads| - // should only contain device ids in |devices|. - void SetDeviceListForTest(const std::vector<unsigned int>& devices, - const std::vector<unsigned int>& cmt_devices, - const std::vector<unsigned int>& touchpads); - - // Setups device with |deviceid| to have valuator with type |data_type|, - // at index |val_index|, and with |min|/|max| values. This is only for test - // purpose. - void SetDeviceValuatorForTest(int deviceid, - int val_index, - DataType data_type, - double min, - double max); + // to have safe default values for testing. + void SetDeviceListForTest(const std::vector<unsigned int>& touchscreen, + const std::vector<unsigned int>& cmt_devices); + + void SetValuatorDataForTest(XIDeviceEvent* xievent, + DataType type, + double value); + private: // Requirement for Singleton. friend struct DefaultSingletonTraits<DeviceDataManager>; @@ -245,6 +239,12 @@ class EVENTS_BASE_EXPORT DeviceDataManager { // Check if an XI event contains data of the specified type. bool HasEventData(const XIDeviceEvent* xiev, const DataType type) const; + void InitializeValuatorsForTest(int deviceid, + int start_valuator, + int end_valuator, + double min_value, + double max_value); + static const int kMaxDeviceNum = 128; static const int kMaxXIEventType = XI_LASTEVENT + 1; static const int kMaxSlotNum = 10; diff --git a/ui/events/x/events_x.cc b/ui/events/x/events_x.cc index f8f2decec6..498a69c7dc 100644 --- a/ui/events/x/events_x.cc +++ b/ui/events/x/events_x.cc @@ -474,6 +474,10 @@ KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) { return KeyboardCodeFromXKeyEvent(native_event); } +const char* CodeFromNative(const base::NativeEvent& native_event) { + return CodeFromXEvent(native_event); +} + bool IsMouseEvent(const base::NativeEvent& native_event) { if (native_event->type == EnterNotify || native_event->type == LeaveNotify || diff --git a/ui/events/x/events_x_unittest.cc b/ui/events/x/events_x_unittest.cc index 643454b5dc..b6c7f38c0c 100644 --- a/ui/events/x/events_x_unittest.cc +++ b/ui/events/x/events_x_unittest.cc @@ -175,7 +175,7 @@ TEST(EventsXTest, ClickCount) { TEST(EventsXTest, TouchEventBasic) { std::vector<unsigned int> devices; devices.push_back(0); - ui::SetupTouchDevicesForTest(devices); + ui::SetUpTouchDevicesForTest(devices); std::vector<Valuator> valuators; // Init touch begin with tracking id 5, touch id 0. diff --git a/ui/gfx/android/gfx_jni_registrar.cc b/ui/gfx/android/gfx_jni_registrar.cc index be60a33e5a..5b9ab1dbf1 100644 --- a/ui/gfx/android/gfx_jni_registrar.cc +++ b/ui/gfx/android/gfx_jni_registrar.cc @@ -8,6 +8,7 @@ #include "base/android/jni_registrar.h" #include "ui/gfx/android/java_bitmap.h" #include "ui/gfx/android/shared_device_display_info.h" +#include "ui/gfx/android/view_configuration.h" namespace gfx { namespace android { @@ -16,6 +17,7 @@ static base::android::RegistrationMethod kGfxRegisteredMethods[] = { { "SharedDeviceDisplayInfo", SharedDeviceDisplayInfo::RegisterSharedDeviceDisplayInfo }, { "JavaBitmap", JavaBitmap::RegisterJavaBitmap }, + { "ViewConfiguration", ViewConfiguration::RegisterViewConfiguration } }; bool RegisterJni(JNIEnv* env) { diff --git a/ui/gfx/android/view_configuration.cc b/ui/gfx/android/view_configuration.cc new file mode 100644 index 0000000000..63657178b1 --- /dev/null +++ b/ui/gfx/android/view_configuration.cc @@ -0,0 +1,56 @@ +// Copyright 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. + +#include "ui/gfx/android/view_configuration.h" + +#include "base/android/jni_android.h" +#include "jni/ViewConfiguration_jni.h" + +using namespace JNI_ViewConfiguration; +using base::android::AttachCurrentThread; +using base::android::GetApplicationContext; + +namespace gfx { + +int ViewConfiguration::GetDoubleTapTimeoutInMs() { + JNIEnv* env = AttachCurrentThread(); + return Java_ViewConfiguration_getDoubleTapTimeout(env); +} + +int ViewConfiguration::GetLongPressTimeoutInMs() { + JNIEnv* env = AttachCurrentThread(); + return Java_ViewConfiguration_getLongPressTimeout(env); +} + +int ViewConfiguration::GetTapTimeoutInMs() { + JNIEnv* env = AttachCurrentThread(); + return Java_ViewConfiguration_getTapTimeout(env); +} + +int ViewConfiguration::GetMaximumFlingVelocityInPixelsPerSecond() { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> view = + Java_ViewConfiguration_get(env, GetApplicationContext()); + return Java_ViewConfiguration_getScaledMaximumFlingVelocity(env, view.obj()); +} + +int ViewConfiguration::GetMinimumFlingVelocityInPixelsPerSecond() { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> view = + Java_ViewConfiguration_get(env, GetApplicationContext()); + return Java_ViewConfiguration_getScaledMinimumFlingVelocity(env, view.obj()); +} + +int ViewConfiguration::GetTouchSlopInPixels() { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> view = + Java_ViewConfiguration_get(env, GetApplicationContext()); + return Java_ViewConfiguration_getScaledTouchSlop(env, view.obj()); +} + +bool ViewConfiguration::RegisterViewConfiguration(JNIEnv* env) { + return RegisterNativesImpl(env); +} + +} // namespace gfx diff --git a/ui/gfx/android/view_configuration.h b/ui/gfx/android/view_configuration.h new file mode 100644 index 0000000000..f0995cb3e2 --- /dev/null +++ b/ui/gfx/android/view_configuration.h @@ -0,0 +1,32 @@ +// Copyright 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. + +#ifndef UI_GFX_ANDROID_VIEW_CONFIGURATION_H_ +#define UI_GFX_ANDROID_VIEW_CONFIGURATION_H_ + +#include <jni.h> + +#include "ui/gfx/gfx_export.h" + +namespace gfx { + +// Provides access to Android's ViewConfiguration for gesture-related constants. +class GFX_EXPORT ViewConfiguration { + public: + static int GetDoubleTapTimeoutInMs(); + static int GetLongPressTimeoutInMs(); + static int GetTapTimeoutInMs(); + + static int GetMaximumFlingVelocityInPixelsPerSecond(); + static int GetMinimumFlingVelocityInPixelsPerSecond(); + + static int GetTouchSlopInPixels(); + + // Registers methods with JNI and returns true if succeeded. + static bool RegisterViewConfiguration(JNIEnv* env); +}; + +} // namespace gfx + +#endif // UI_GFX_ANDROID_VIEW_CONFIGURATION_H_ diff --git a/ui/gfx/canvas.cc b/ui/gfx/canvas.cc index 69f10cfff2..b89efa9e2b 100644 --- a/ui/gfx/canvas.cc +++ b/ui/gfx/canvas.cc @@ -332,6 +332,22 @@ void Canvas::DrawFocusRect(const Rect& rect) { DrawDashedRect(rect, SK_ColorGRAY); } +void Canvas::DrawSolidFocusRect(const Rect& rect, SkColor color) { + SkPaint paint; + paint.setColor(color); + paint.setStrokeWidth(SkIntToScalar(1)); + // Note: We cannot use DrawRect since it would create a path and fill it which + // would cause problems near the edge of the canvas. + int x1 = std::min(rect.x(), rect.right()); + int x2 = std::max(rect.x(), rect.right()); + int y1 = std::min(rect.y(), rect.bottom()); + int y2 = std::max(rect.y(), rect.bottom()); + DrawLine(Point(x1, y1), Point(x2, y1), paint); + DrawLine(Point(x1, y2), Point(x2, y2), paint); + DrawLine(Point(x1, y1), Point(x1, y2), paint); + DrawLine(Point(x2, y1), Point(x2, y2 + 1), paint); +} + void Canvas::DrawImageInt(const ImageSkia& image, int x, int y) { SkPaint paint; DrawImageInt(image, x, y, paint); diff --git a/ui/gfx/canvas.h b/ui/gfx/canvas.h index eb86e69871..f8193f1134 100644 --- a/ui/gfx/canvas.h +++ b/ui/gfx/canvas.h @@ -409,6 +409,10 @@ class GFX_EXPORT Canvas { // Draws a dotted gray rectangle used for focus purposes. void DrawFocusRect(const Rect& rect); + // Draws a |rect| in the specified region with the specified |color| with a + // with of one logical pixel which might be more device pixels. + void DrawSolidFocusRect(const Rect& rect, SkColor color); + // Tiles the image in the specified region. // Parameters are specified relative to current canvas scale not in pixels. // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1. diff --git a/ui/gfx/font.cc b/ui/gfx/font.cc index 7f6ac7ce80..9eea73b608 100644 --- a/ui/gfx/font.cc +++ b/ui/gfx/font.cc @@ -78,6 +78,10 @@ std::string Font::GetFontName() const { return platform_font_->GetFontName(); } +std::string Font::GetActualFontNameForTesting() const { + return platform_font_->GetActualFontNameForTesting(); +} + int Font::GetFontSize() const { return platform_font_->GetFontSize(); } diff --git a/ui/gfx/font.h b/ui/gfx/font.h index f84bfa2bf6..963dde70ff 100644 --- a/ui/gfx/font.h +++ b/ui/gfx/font.h @@ -96,9 +96,12 @@ class GFX_EXPORT Font { // Returns the style of the font. int GetStyle() const; - // Returns the font name in UTF-8. + // Returns the specified font name in UTF-8. std::string GetFontName() const; + // Returns the actually used font name in UTF-8. + std::string GetActualFontNameForTesting() const; + // Returns the font size in pixels. int GetFontSize() const; diff --git a/ui/gfx/font_list_unittest.cc b/ui/gfx/font_list_unittest.cc index f263673e16..6cbb41fbec 100644 --- a/ui/gfx/font_list_unittest.cc +++ b/ui/gfx/font_list_unittest.cc @@ -9,6 +9,7 @@ #include <vector> #include "base/strings/string_number_conversions.h" +#include "base/strings/string_util.h" #include "testing/gtest/include/gtest/gtest.h" namespace { @@ -289,10 +290,10 @@ TEST(FontListTest, Fonts_DeriveFontListWithSizeDeltaAndStyle) { EXPECT_EQ("Sans serif|13|bold", FontToString(derived_fonts[1])); } -// Disabled. http://crbug.com/316955 -TEST(FontListTest, DISABLED_Fonts_GetHeight_GetBaseline) { +TEST(FontListTest, Fonts_GetHeight_GetBaseline) { // If a font list has only one font, the height and baseline must be the same. Font font1("Arial", 16); + ASSERT_EQ("arial", StringToLowerASCII(font1.GetActualFontNameForTesting())); FontList font_list1("Arial, 16px"); EXPECT_EQ(font1.GetHeight(), font_list1.GetHeight()); EXPECT_EQ(font1.GetBaseline(), font_list1.GetBaseline()); @@ -300,6 +301,7 @@ TEST(FontListTest, DISABLED_Fonts_GetHeight_GetBaseline) { // If there are two different fonts, the font list returns the max value // for ascent and descent. Font font2("Symbol", 16); + ASSERT_EQ("symbol", StringToLowerASCII(font2.GetActualFontNameForTesting())); EXPECT_NE(font1.GetBaseline(), font2.GetBaseline()); EXPECT_NE(font1.GetHeight() - font1.GetBaseline(), font2.GetHeight() - font2.GetBaseline()); diff --git a/ui/gfx/font_unittest.cc b/ui/gfx/font_unittest.cc index 2fe61939d1..2fdaab872f 100644 --- a/ui/gfx/font_unittest.cc +++ b/ui/gfx/font_unittest.cc @@ -5,6 +5,7 @@ #include "ui/gfx/font.h" #include "base/strings/string16.h" +#include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "testing/gtest/include/gtest/gtest.h" @@ -63,6 +64,7 @@ TEST_F(FontTest, LoadArial) { EXPECT_EQ(cf.GetStyle(), Font::NORMAL); EXPECT_EQ(cf.GetFontSize(), 16); EXPECT_EQ(cf.GetFontName(), "Arial"); + EXPECT_EQ("arial", StringToLowerASCII(cf.GetActualFontNameForTesting())); FreeIfNecessary(native); } @@ -72,6 +74,7 @@ TEST_F(FontTest, LoadArialBold) { NativeFont native = bold.GetNativeFont(); EXPECT_TRUE(native); EXPECT_EQ(bold.GetStyle(), Font::BOLD); + EXPECT_EQ("arial", StringToLowerASCII(cf.GetActualFontNameForTesting())); FreeIfNecessary(native); } @@ -123,6 +126,22 @@ TEST_F(FontTest, Widths) { cf.GetStringWidth(ASCIIToUTF16("ab"))); } +#if !defined(OS_WIN) +// On Windows, Font::GetActualFontNameForTesting() doesn't work well for now. +// http://crbug.com/327287 +TEST_F(FontTest, GetActualFontNameForTesting) { + Font arial("Arial", 16); + EXPECT_EQ("arial", StringToLowerASCII(arial.GetActualFontNameForTesting())); + Font symbol("Symbol", 16); + EXPECT_EQ("symbol", StringToLowerASCII(symbol.GetActualFontNameForTesting())); + + const char* const invalid_font_name = "no_such_font_name"; + Font fallback_font(invalid_font_name, 16); + EXPECT_NE(invalid_font_name, + StringToLowerASCII(fallback_font.GetActualFontNameForTesting())); +} +#endif + #if defined(OS_WIN) TEST_F(FontTest, DeriveFontResizesIfSizeTooSmall) { Font cf("Arial", 8); diff --git a/ui/gfx/frame_time.h b/ui/gfx/frame_time.h index 8d143eed2c..5cc65f5f4a 100644 --- a/ui/gfx/frame_time.h +++ b/ui/gfx/frame_time.h @@ -28,7 +28,10 @@ class FrameTime { #endif static bool TimestampsAreHighRes() { - return base::TimeTicks::IsHighResNowFastAndReliable(); + // This should really return base::TimeTicks::IsHighResNowFastAndReliable(); + // Returning false makes sure we are only using low-res timestamps until we + // use FrameTime everywhere we need to. See crbug.com/315334 + return false; } }; diff --git a/ui/gfx/gfx.gyp b/ui/gfx/gfx.gyp index bba9b57414..5fb17d52ee 100644 --- a/ui/gfx/gfx.gyp +++ b/ui/gfx/gfx.gyp @@ -41,6 +41,8 @@ 'android/java_bitmap.h', 'android/shared_device_display_info.cc', 'android/shared_device_display_info.h', + 'android/view_configuration.cc', + 'android/view_configuration.h', 'animation/animation.cc', 'animation/animation.h', 'animation/animation_container.cc', @@ -403,8 +405,20 @@ ['OS=="android"' , { 'targets': [ { + 'target_name': 'gfx_view_jni_headers', + 'type': 'none', + 'variables': { + 'jni_gen_package': 'ui/gfx', + 'input_java_class': 'android/view/ViewConfiguration.class', + }, + 'includes': [ '../../build/jar_file_jni_generator.gypi' ], + }, + { 'target_name': 'gfx_jni_headers', 'type': 'none', + 'dependencies': [ + 'gfx_view_jni_headers' + ], 'direct_dependent_settings': { 'include_dirs': [ '<(SHARED_INTERMEDIATE_DIR)/ui/gfx', @@ -416,7 +430,7 @@ ], 'variables': { 'jni_gen_package': 'ui/gfx', - 'jni_generator_ptr_type': 'long', + 'jni_generator_ptr_type': 'long' }, 'includes': [ '../../build/jni_generator.gypi' ], }, diff --git a/ui/gfx/gfx.target.darwin-arm.mk b/ui/gfx/gfx.target.darwin-arm.mk index 9dd3da459a..68cdfaf472 100644 --- a/ui/gfx/gfx.target.darwin-arm.mk +++ b/ui/gfx/gfx.target.darwin-arm.mk @@ -33,6 +33,7 @@ LOCAL_SRC_FILES := \ ui/gfx/android/gfx_jni_registrar.cc \ ui/gfx/android/java_bitmap.cc \ ui/gfx/android/shared_device_display_info.cc \ + ui/gfx/android/view_configuration.cc \ ui/gfx/animation/animation.cc \ ui/gfx/animation/animation_container.cc \ ui/gfx/animation/linear_animation.cc \ @@ -137,6 +138,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -146,9 +148,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGFX_IMPLEMENTATION' \ '-DPOSIX_AVOID_MMAP' \ @@ -254,6 +258,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -263,9 +268,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGFX_IMPLEMENTATION' \ '-DPOSIX_AVOID_MMAP' \ diff --git a/ui/gfx/gfx.target.darwin-mips.mk b/ui/gfx/gfx.target.darwin-mips.mk index 2c83dfcfea..1f3e3c58ab 100644 --- a/ui/gfx/gfx.target.darwin-mips.mk +++ b/ui/gfx/gfx.target.darwin-mips.mk @@ -33,6 +33,7 @@ LOCAL_SRC_FILES := \ ui/gfx/android/gfx_jni_registrar.cc \ ui/gfx/android/java_bitmap.cc \ ui/gfx/android/shared_device_display_info.cc \ + ui/gfx/android/view_configuration.cc \ ui/gfx/animation/animation.cc \ ui/gfx/animation/animation_container.cc \ ui/gfx/animation/linear_animation.cc \ @@ -136,6 +137,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -145,9 +147,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGFX_IMPLEMENTATION' \ '-DPOSIX_AVOID_MMAP' \ @@ -252,6 +256,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -261,9 +266,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGFX_IMPLEMENTATION' \ '-DPOSIX_AVOID_MMAP' \ diff --git a/ui/gfx/gfx.target.darwin-x86.mk b/ui/gfx/gfx.target.darwin-x86.mk index 661858e374..627d38a969 100644 --- a/ui/gfx/gfx.target.darwin-x86.mk +++ b/ui/gfx/gfx.target.darwin-x86.mk @@ -33,6 +33,7 @@ LOCAL_SRC_FILES := \ ui/gfx/android/gfx_jni_registrar.cc \ ui/gfx/android/java_bitmap.cc \ ui/gfx/android/shared_device_display_info.cc \ + ui/gfx/android/view_configuration.cc \ ui/gfx/animation/animation.cc \ ui/gfx/animation/animation_container.cc \ ui/gfx/animation/linear_animation.cc \ @@ -139,6 +140,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -148,9 +150,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGFX_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -258,6 +262,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -267,9 +272,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGFX_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ diff --git a/ui/gfx/gfx.target.linux-arm.mk b/ui/gfx/gfx.target.linux-arm.mk index 9dd3da459a..68cdfaf472 100644 --- a/ui/gfx/gfx.target.linux-arm.mk +++ b/ui/gfx/gfx.target.linux-arm.mk @@ -33,6 +33,7 @@ LOCAL_SRC_FILES := \ ui/gfx/android/gfx_jni_registrar.cc \ ui/gfx/android/java_bitmap.cc \ ui/gfx/android/shared_device_display_info.cc \ + ui/gfx/android/view_configuration.cc \ ui/gfx/animation/animation.cc \ ui/gfx/animation/animation_container.cc \ ui/gfx/animation/linear_animation.cc \ @@ -137,6 +138,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -146,9 +148,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGFX_IMPLEMENTATION' \ '-DPOSIX_AVOID_MMAP' \ @@ -254,6 +258,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -263,9 +268,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGFX_IMPLEMENTATION' \ '-DPOSIX_AVOID_MMAP' \ diff --git a/ui/gfx/gfx.target.linux-mips.mk b/ui/gfx/gfx.target.linux-mips.mk index 2c83dfcfea..1f3e3c58ab 100644 --- a/ui/gfx/gfx.target.linux-mips.mk +++ b/ui/gfx/gfx.target.linux-mips.mk @@ -33,6 +33,7 @@ LOCAL_SRC_FILES := \ ui/gfx/android/gfx_jni_registrar.cc \ ui/gfx/android/java_bitmap.cc \ ui/gfx/android/shared_device_display_info.cc \ + ui/gfx/android/view_configuration.cc \ ui/gfx/animation/animation.cc \ ui/gfx/animation/animation_container.cc \ ui/gfx/animation/linear_animation.cc \ @@ -136,6 +137,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -145,9 +147,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGFX_IMPLEMENTATION' \ '-DPOSIX_AVOID_MMAP' \ @@ -252,6 +256,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -261,9 +266,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGFX_IMPLEMENTATION' \ '-DPOSIX_AVOID_MMAP' \ diff --git a/ui/gfx/gfx.target.linux-x86.mk b/ui/gfx/gfx.target.linux-x86.mk index 661858e374..627d38a969 100644 --- a/ui/gfx/gfx.target.linux-x86.mk +++ b/ui/gfx/gfx.target.linux-x86.mk @@ -33,6 +33,7 @@ LOCAL_SRC_FILES := \ ui/gfx/android/gfx_jni_registrar.cc \ ui/gfx/android/java_bitmap.cc \ ui/gfx/android/shared_device_display_info.cc \ + ui/gfx/android/view_configuration.cc \ ui/gfx/animation/animation.cc \ ui/gfx/animation/animation_container.cc \ ui/gfx/animation/linear_animation.cc \ @@ -139,6 +140,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -148,9 +150,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGFX_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -258,6 +262,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -267,9 +272,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGFX_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ diff --git a/ui/gfx/gfx_jni_headers.target.darwin-arm.mk b/ui/gfx/gfx_jni_headers.target.darwin-arm.mk index cdfd65e013..dd5ac24499 100644 --- a/ui/gfx/gfx_jni_headers.target.darwin-arm.mk +++ b/ui/gfx/gfx_jni_headers.target.darwin-arm.mk @@ -11,7 +11,8 @@ gyp_intermediate_dir := $(call local-intermediates-dir) gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) # Make sure our deps are built first. -GYP_TARGET_DEPENDENCIES := +GYP_TARGET_DEPENDENCIES := \ + $(call intermediates-dir-for,GYP,ui_gfx_gfx_view_jni_headers_gyp)/gfx_view_jni_headers.stamp ### Generated for rule "ui_gfx_gfx_gyp_gfx_jni_headers_target_generate_jni_headers": @@ -90,6 +91,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -99,9 +101,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -169,6 +173,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -178,9 +183,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gfx/gfx_jni_headers.target.darwin-mips.mk b/ui/gfx/gfx_jni_headers.target.darwin-mips.mk index 242613f584..a25c617066 100644 --- a/ui/gfx/gfx_jni_headers.target.darwin-mips.mk +++ b/ui/gfx/gfx_jni_headers.target.darwin-mips.mk @@ -11,7 +11,8 @@ gyp_intermediate_dir := $(call local-intermediates-dir) gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) # Make sure our deps are built first. -GYP_TARGET_DEPENDENCIES := +GYP_TARGET_DEPENDENCIES := \ + $(call intermediates-dir-for,GYP,ui_gfx_gfx_view_jni_headers_gyp)/gfx_view_jni_headers.stamp ### Generated for rule "ui_gfx_gfx_gyp_gfx_jni_headers_target_generate_jni_headers": @@ -89,6 +90,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -98,9 +100,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -167,6 +171,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -176,9 +181,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gfx/gfx_jni_headers.target.darwin-x86.mk b/ui/gfx/gfx_jni_headers.target.darwin-x86.mk index b2f69d44ee..d49eda774f 100644 --- a/ui/gfx/gfx_jni_headers.target.darwin-x86.mk +++ b/ui/gfx/gfx_jni_headers.target.darwin-x86.mk @@ -11,7 +11,8 @@ gyp_intermediate_dir := $(call local-intermediates-dir) gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) # Make sure our deps are built first. -GYP_TARGET_DEPENDENCIES := +GYP_TARGET_DEPENDENCIES := \ + $(call intermediates-dir-for,GYP,ui_gfx_gfx_view_jni_headers_gyp)/gfx_view_jni_headers.stamp ### Generated for rule "ui_gfx_gfx_gyp_gfx_jni_headers_target_generate_jni_headers": @@ -92,6 +93,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -101,9 +103,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -174,6 +178,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -183,9 +188,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gfx/gfx_jni_headers.target.linux-arm.mk b/ui/gfx/gfx_jni_headers.target.linux-arm.mk index cdfd65e013..dd5ac24499 100644 --- a/ui/gfx/gfx_jni_headers.target.linux-arm.mk +++ b/ui/gfx/gfx_jni_headers.target.linux-arm.mk @@ -11,7 +11,8 @@ gyp_intermediate_dir := $(call local-intermediates-dir) gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) # Make sure our deps are built first. -GYP_TARGET_DEPENDENCIES := +GYP_TARGET_DEPENDENCIES := \ + $(call intermediates-dir-for,GYP,ui_gfx_gfx_view_jni_headers_gyp)/gfx_view_jni_headers.stamp ### Generated for rule "ui_gfx_gfx_gyp_gfx_jni_headers_target_generate_jni_headers": @@ -90,6 +91,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -99,9 +101,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -169,6 +173,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -178,9 +183,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gfx/gfx_jni_headers.target.linux-mips.mk b/ui/gfx/gfx_jni_headers.target.linux-mips.mk index 242613f584..a25c617066 100644 --- a/ui/gfx/gfx_jni_headers.target.linux-mips.mk +++ b/ui/gfx/gfx_jni_headers.target.linux-mips.mk @@ -11,7 +11,8 @@ gyp_intermediate_dir := $(call local-intermediates-dir) gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) # Make sure our deps are built first. -GYP_TARGET_DEPENDENCIES := +GYP_TARGET_DEPENDENCIES := \ + $(call intermediates-dir-for,GYP,ui_gfx_gfx_view_jni_headers_gyp)/gfx_view_jni_headers.stamp ### Generated for rule "ui_gfx_gfx_gyp_gfx_jni_headers_target_generate_jni_headers": @@ -89,6 +90,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -98,9 +100,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -167,6 +171,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -176,9 +181,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gfx/gfx_jni_headers.target.linux-x86.mk b/ui/gfx/gfx_jni_headers.target.linux-x86.mk index b2f69d44ee..d49eda774f 100644 --- a/ui/gfx/gfx_jni_headers.target.linux-x86.mk +++ b/ui/gfx/gfx_jni_headers.target.linux-x86.mk @@ -11,7 +11,8 @@ gyp_intermediate_dir := $(call local-intermediates-dir) gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) # Make sure our deps are built first. -GYP_TARGET_DEPENDENCIES := +GYP_TARGET_DEPENDENCIES := \ + $(call intermediates-dir-for,GYP,ui_gfx_gfx_view_jni_headers_gyp)/gfx_view_jni_headers.stamp ### Generated for rule "ui_gfx_gfx_gyp_gfx_jni_headers_target_generate_jni_headers": @@ -92,6 +93,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -101,9 +103,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -174,6 +178,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -183,9 +188,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gfx/gfx_view_jni_headers.target.darwin-arm.mk b/ui/gfx/gfx_view_jni_headers.target.darwin-arm.mk new file mode 100644 index 0000000000..e3674d90bd --- /dev/null +++ b/ui/gfx/gfx_view_jni_headers.target.darwin-arm.mk @@ -0,0 +1,226 @@ +# This file is generated by gyp; do not edit. + +include $(CLEAR_VARS) + +LOCAL_MODULE_CLASS := GYP +LOCAL_MODULE := ui_gfx_gfx_view_jni_headers_gyp +LOCAL_MODULE_STEM := gfx_view_jni_headers +LOCAL_MODULE_SUFFIX := .stamp +LOCAL_MODULE_TAGS := optional +gyp_intermediate_dir := $(call local-intermediates-dir) +gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) + +# Make sure our deps are built first. +GYP_TARGET_DEPENDENCIES := + +### Rules for action "generate_jni_headers_from_jar_file": +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_local_path := $(LOCAL_PATH) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(PWD)/prebuilts/sdk/18/android.jar $(GYP_TARGET_DEPENDENCIES) + @echo "Gyp action: Generating JNI bindings from $(PWD)/prebuilts/sdk/18/android.jar/android/view/ViewConfiguration.class ($@)" + $(hide)cd $(gyp_local_path)/ui/gfx; mkdir -p $(gyp_shared_intermediate_dir)/ui/gfx/jni; ../../base/android/jni_generator/jni_generator.py -j "$(PWD)/prebuilts/sdk/18/android.jar" --input_file android/view/ViewConfiguration.class --output_dir "$(gyp_shared_intermediate_dir)/ui/gfx/jni" --optimize_generation 0 + + + +GYP_GENERATED_OUTPUTS := \ + $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h + +# Make sure our deps and generated files are built first. +LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS) + +LOCAL_GENERATED_SOURCES := \ + $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h + +GYP_COPIED_SOURCE_ORIGIN_DIRS := + +LOCAL_SRC_FILES := + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Debug := \ + -fstack-protector \ + --param=ssp-buffer-size=4 \ + -Werror \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -fno-tree-sra \ + -fuse-ld=gold \ + -Wno-psabi \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fstack-protector \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -Os \ + -g \ + -fomit-frame-pointer \ + -fdata-sections \ + -ffunction-sections + +MY_DEFS_Debug := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \ + '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \ + '-D_DEBUG' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Debug := \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Debug := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-abi \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Release := \ + -fstack-protector \ + --param=ssp-buffer-size=4 \ + -Werror \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -fno-tree-sra \ + -fuse-ld=gold \ + -Wno-psabi \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fstack-protector \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -Os \ + -fno-ident \ + -fdata-sections \ + -ffunction-sections \ + -fomit-frame-pointer + +MY_DEFS_Release := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DNDEBUG' \ + '-DNVALGRIND' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \ + '-D_FORTIFY_SOURCE=2' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Release := \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Release := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-abi \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION)) +LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION)) +LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION)) +### Rules for final target. +# Add target alias to "gyp_all_modules" target. +.PHONY: gyp_all_modules +gyp_all_modules: ui_gfx_gfx_view_jni_headers_gyp + +# Alias gyp target name. +.PHONY: gfx_view_jni_headers +gfx_view_jni_headers: ui_gfx_gfx_view_jni_headers_gyp + +LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp +LOCAL_UNINSTALLABLE_MODULE := true + +include $(BUILD_SYSTEM)/base_rules.mk + +$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES) + $(hide) echo "Gyp timestamp: $@" + $(hide) mkdir -p $(dir $@) + $(hide) touch $@ diff --git a/ui/gfx/gfx_view_jni_headers.target.darwin-mips.mk b/ui/gfx/gfx_view_jni_headers.target.darwin-mips.mk new file mode 100644 index 0000000000..4d9f26b3b6 --- /dev/null +++ b/ui/gfx/gfx_view_jni_headers.target.darwin-mips.mk @@ -0,0 +1,224 @@ +# This file is generated by gyp; do not edit. + +include $(CLEAR_VARS) + +LOCAL_MODULE_CLASS := GYP +LOCAL_MODULE := ui_gfx_gfx_view_jni_headers_gyp +LOCAL_MODULE_STEM := gfx_view_jni_headers +LOCAL_MODULE_SUFFIX := .stamp +LOCAL_MODULE_TAGS := optional +gyp_intermediate_dir := $(call local-intermediates-dir) +gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) + +# Make sure our deps are built first. +GYP_TARGET_DEPENDENCIES := + +### Rules for action "generate_jni_headers_from_jar_file": +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_local_path := $(LOCAL_PATH) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(PWD)/prebuilts/sdk/18/android.jar $(GYP_TARGET_DEPENDENCIES) + @echo "Gyp action: Generating JNI bindings from $(PWD)/prebuilts/sdk/18/android.jar/android/view/ViewConfiguration.class ($@)" + $(hide)cd $(gyp_local_path)/ui/gfx; mkdir -p $(gyp_shared_intermediate_dir)/ui/gfx/jni; ../../base/android/jni_generator/jni_generator.py -j "$(PWD)/prebuilts/sdk/18/android.jar" --input_file android/view/ViewConfiguration.class --output_dir "$(gyp_shared_intermediate_dir)/ui/gfx/jni" --optimize_generation 0 + + + +GYP_GENERATED_OUTPUTS := \ + $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h + +# Make sure our deps and generated files are built first. +LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS) + +LOCAL_GENERATED_SOURCES := \ + $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h + +GYP_COPIED_SOURCE_ORIGIN_DIRS := + +LOCAL_SRC_FILES := + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Debug := \ + -fstack-protector \ + --param=ssp-buffer-size=4 \ + \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -EL \ + -mhard-float \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fstack-protector \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -Os \ + -g \ + -fomit-frame-pointer \ + -fdata-sections \ + -ffunction-sections + +MY_DEFS_Debug := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \ + '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \ + '-D_DEBUG' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Debug := \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Debug := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-uninitialized \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Release := \ + -fstack-protector \ + --param=ssp-buffer-size=4 \ + \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -EL \ + -mhard-float \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fstack-protector \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -Os \ + -fno-ident \ + -fdata-sections \ + -ffunction-sections \ + -fomit-frame-pointer + +MY_DEFS_Release := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DNDEBUG' \ + '-DNVALGRIND' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \ + '-D_FORTIFY_SOURCE=2' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Release := \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Release := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-uninitialized \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION)) +LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION)) +LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION)) +### Rules for final target. +# Add target alias to "gyp_all_modules" target. +.PHONY: gyp_all_modules +gyp_all_modules: ui_gfx_gfx_view_jni_headers_gyp + +# Alias gyp target name. +.PHONY: gfx_view_jni_headers +gfx_view_jni_headers: ui_gfx_gfx_view_jni_headers_gyp + +LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp +LOCAL_UNINSTALLABLE_MODULE := true + +include $(BUILD_SYSTEM)/base_rules.mk + +$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES) + $(hide) echo "Gyp timestamp: $@" + $(hide) mkdir -p $(dir $@) + $(hide) touch $@ diff --git a/ui/gfx/gfx_view_jni_headers.target.darwin-x86.mk b/ui/gfx/gfx_view_jni_headers.target.darwin-x86.mk new file mode 100644 index 0000000000..16b0959015 --- /dev/null +++ b/ui/gfx/gfx_view_jni_headers.target.darwin-x86.mk @@ -0,0 +1,230 @@ +# This file is generated by gyp; do not edit. + +include $(CLEAR_VARS) + +LOCAL_MODULE_CLASS := GYP +LOCAL_MODULE := ui_gfx_gfx_view_jni_headers_gyp +LOCAL_MODULE_STEM := gfx_view_jni_headers +LOCAL_MODULE_SUFFIX := .stamp +LOCAL_MODULE_TAGS := optional +gyp_intermediate_dir := $(call local-intermediates-dir) +gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) + +# Make sure our deps are built first. +GYP_TARGET_DEPENDENCIES := + +### Rules for action "generate_jni_headers_from_jar_file": +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_local_path := $(LOCAL_PATH) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(PWD)/prebuilts/sdk/18/android.jar $(GYP_TARGET_DEPENDENCIES) + @echo "Gyp action: Generating JNI bindings from $(PWD)/prebuilts/sdk/18/android.jar/android/view/ViewConfiguration.class ($@)" + $(hide)cd $(gyp_local_path)/ui/gfx; mkdir -p $(gyp_shared_intermediate_dir)/ui/gfx/jni; ../../base/android/jni_generator/jni_generator.py -j "$(PWD)/prebuilts/sdk/18/android.jar" --input_file android/view/ViewConfiguration.class --output_dir "$(gyp_shared_intermediate_dir)/ui/gfx/jni" --optimize_generation 0 + + + +GYP_GENERATED_OUTPUTS := \ + $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h + +# Make sure our deps and generated files are built first. +LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS) + +LOCAL_GENERATED_SOURCES := \ + $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h + +GYP_COPIED_SOURCE_ORIGIN_DIRS := + +LOCAL_SRC_FILES := + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Debug := \ + --param=ssp-buffer-size=4 \ + -Werror \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -m32 \ + -mmmx \ + -march=pentium4 \ + -msse2 \ + -mfpmath=sse \ + -fuse-ld=gold \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -fno-stack-protector \ + -Os \ + -g \ + -fomit-frame-pointer \ + -fdata-sections \ + -ffunction-sections + +MY_DEFS_Debug := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \ + '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \ + '-D_DEBUG' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Debug := \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Debug := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Release := \ + --param=ssp-buffer-size=4 \ + -Werror \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -m32 \ + -mmmx \ + -march=pentium4 \ + -msse2 \ + -mfpmath=sse \ + -fuse-ld=gold \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -fno-stack-protector \ + -Os \ + -fno-ident \ + -fdata-sections \ + -ffunction-sections \ + -fomit-frame-pointer \ + -fno-unwind-tables \ + -fno-asynchronous-unwind-tables + +MY_DEFS_Release := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DNDEBUG' \ + '-DNVALGRIND' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \ + '-D_FORTIFY_SOURCE=2' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Release := \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Release := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION)) +LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION)) +LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION)) +### Rules for final target. +# Add target alias to "gyp_all_modules" target. +.PHONY: gyp_all_modules +gyp_all_modules: ui_gfx_gfx_view_jni_headers_gyp + +# Alias gyp target name. +.PHONY: gfx_view_jni_headers +gfx_view_jni_headers: ui_gfx_gfx_view_jni_headers_gyp + +LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp +LOCAL_UNINSTALLABLE_MODULE := true + +include $(BUILD_SYSTEM)/base_rules.mk + +$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES) + $(hide) echo "Gyp timestamp: $@" + $(hide) mkdir -p $(dir $@) + $(hide) touch $@ diff --git a/ui/gfx/gfx_view_jni_headers.target.linux-arm.mk b/ui/gfx/gfx_view_jni_headers.target.linux-arm.mk new file mode 100644 index 0000000000..e3674d90bd --- /dev/null +++ b/ui/gfx/gfx_view_jni_headers.target.linux-arm.mk @@ -0,0 +1,226 @@ +# This file is generated by gyp; do not edit. + +include $(CLEAR_VARS) + +LOCAL_MODULE_CLASS := GYP +LOCAL_MODULE := ui_gfx_gfx_view_jni_headers_gyp +LOCAL_MODULE_STEM := gfx_view_jni_headers +LOCAL_MODULE_SUFFIX := .stamp +LOCAL_MODULE_TAGS := optional +gyp_intermediate_dir := $(call local-intermediates-dir) +gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) + +# Make sure our deps are built first. +GYP_TARGET_DEPENDENCIES := + +### Rules for action "generate_jni_headers_from_jar_file": +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_local_path := $(LOCAL_PATH) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(PWD)/prebuilts/sdk/18/android.jar $(GYP_TARGET_DEPENDENCIES) + @echo "Gyp action: Generating JNI bindings from $(PWD)/prebuilts/sdk/18/android.jar/android/view/ViewConfiguration.class ($@)" + $(hide)cd $(gyp_local_path)/ui/gfx; mkdir -p $(gyp_shared_intermediate_dir)/ui/gfx/jni; ../../base/android/jni_generator/jni_generator.py -j "$(PWD)/prebuilts/sdk/18/android.jar" --input_file android/view/ViewConfiguration.class --output_dir "$(gyp_shared_intermediate_dir)/ui/gfx/jni" --optimize_generation 0 + + + +GYP_GENERATED_OUTPUTS := \ + $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h + +# Make sure our deps and generated files are built first. +LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS) + +LOCAL_GENERATED_SOURCES := \ + $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h + +GYP_COPIED_SOURCE_ORIGIN_DIRS := + +LOCAL_SRC_FILES := + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Debug := \ + -fstack-protector \ + --param=ssp-buffer-size=4 \ + -Werror \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -fno-tree-sra \ + -fuse-ld=gold \ + -Wno-psabi \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fstack-protector \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -Os \ + -g \ + -fomit-frame-pointer \ + -fdata-sections \ + -ffunction-sections + +MY_DEFS_Debug := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \ + '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \ + '-D_DEBUG' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Debug := \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Debug := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-abi \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Release := \ + -fstack-protector \ + --param=ssp-buffer-size=4 \ + -Werror \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -fno-tree-sra \ + -fuse-ld=gold \ + -Wno-psabi \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fstack-protector \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -Os \ + -fno-ident \ + -fdata-sections \ + -ffunction-sections \ + -fomit-frame-pointer + +MY_DEFS_Release := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DNDEBUG' \ + '-DNVALGRIND' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \ + '-D_FORTIFY_SOURCE=2' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Release := \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Release := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-abi \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION)) +LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION)) +LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION)) +### Rules for final target. +# Add target alias to "gyp_all_modules" target. +.PHONY: gyp_all_modules +gyp_all_modules: ui_gfx_gfx_view_jni_headers_gyp + +# Alias gyp target name. +.PHONY: gfx_view_jni_headers +gfx_view_jni_headers: ui_gfx_gfx_view_jni_headers_gyp + +LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp +LOCAL_UNINSTALLABLE_MODULE := true + +include $(BUILD_SYSTEM)/base_rules.mk + +$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES) + $(hide) echo "Gyp timestamp: $@" + $(hide) mkdir -p $(dir $@) + $(hide) touch $@ diff --git a/ui/gfx/gfx_view_jni_headers.target.linux-mips.mk b/ui/gfx/gfx_view_jni_headers.target.linux-mips.mk new file mode 100644 index 0000000000..4d9f26b3b6 --- /dev/null +++ b/ui/gfx/gfx_view_jni_headers.target.linux-mips.mk @@ -0,0 +1,224 @@ +# This file is generated by gyp; do not edit. + +include $(CLEAR_VARS) + +LOCAL_MODULE_CLASS := GYP +LOCAL_MODULE := ui_gfx_gfx_view_jni_headers_gyp +LOCAL_MODULE_STEM := gfx_view_jni_headers +LOCAL_MODULE_SUFFIX := .stamp +LOCAL_MODULE_TAGS := optional +gyp_intermediate_dir := $(call local-intermediates-dir) +gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) + +# Make sure our deps are built first. +GYP_TARGET_DEPENDENCIES := + +### Rules for action "generate_jni_headers_from_jar_file": +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_local_path := $(LOCAL_PATH) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(PWD)/prebuilts/sdk/18/android.jar $(GYP_TARGET_DEPENDENCIES) + @echo "Gyp action: Generating JNI bindings from $(PWD)/prebuilts/sdk/18/android.jar/android/view/ViewConfiguration.class ($@)" + $(hide)cd $(gyp_local_path)/ui/gfx; mkdir -p $(gyp_shared_intermediate_dir)/ui/gfx/jni; ../../base/android/jni_generator/jni_generator.py -j "$(PWD)/prebuilts/sdk/18/android.jar" --input_file android/view/ViewConfiguration.class --output_dir "$(gyp_shared_intermediate_dir)/ui/gfx/jni" --optimize_generation 0 + + + +GYP_GENERATED_OUTPUTS := \ + $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h + +# Make sure our deps and generated files are built first. +LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS) + +LOCAL_GENERATED_SOURCES := \ + $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h + +GYP_COPIED_SOURCE_ORIGIN_DIRS := + +LOCAL_SRC_FILES := + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Debug := \ + -fstack-protector \ + --param=ssp-buffer-size=4 \ + \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -EL \ + -mhard-float \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fstack-protector \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -Os \ + -g \ + -fomit-frame-pointer \ + -fdata-sections \ + -ffunction-sections + +MY_DEFS_Debug := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \ + '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \ + '-D_DEBUG' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Debug := \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Debug := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-uninitialized \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Release := \ + -fstack-protector \ + --param=ssp-buffer-size=4 \ + \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -EL \ + -mhard-float \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fstack-protector \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -Os \ + -fno-ident \ + -fdata-sections \ + -ffunction-sections \ + -fomit-frame-pointer + +MY_DEFS_Release := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DNDEBUG' \ + '-DNVALGRIND' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \ + '-D_FORTIFY_SOURCE=2' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Release := \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Release := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-uninitialized \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION)) +LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION)) +LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION)) +### Rules for final target. +# Add target alias to "gyp_all_modules" target. +.PHONY: gyp_all_modules +gyp_all_modules: ui_gfx_gfx_view_jni_headers_gyp + +# Alias gyp target name. +.PHONY: gfx_view_jni_headers +gfx_view_jni_headers: ui_gfx_gfx_view_jni_headers_gyp + +LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp +LOCAL_UNINSTALLABLE_MODULE := true + +include $(BUILD_SYSTEM)/base_rules.mk + +$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES) + $(hide) echo "Gyp timestamp: $@" + $(hide) mkdir -p $(dir $@) + $(hide) touch $@ diff --git a/ui/gfx/gfx_view_jni_headers.target.linux-x86.mk b/ui/gfx/gfx_view_jni_headers.target.linux-x86.mk new file mode 100644 index 0000000000..16b0959015 --- /dev/null +++ b/ui/gfx/gfx_view_jni_headers.target.linux-x86.mk @@ -0,0 +1,230 @@ +# This file is generated by gyp; do not edit. + +include $(CLEAR_VARS) + +LOCAL_MODULE_CLASS := GYP +LOCAL_MODULE := ui_gfx_gfx_view_jni_headers_gyp +LOCAL_MODULE_STEM := gfx_view_jni_headers +LOCAL_MODULE_SUFFIX := .stamp +LOCAL_MODULE_TAGS := optional +gyp_intermediate_dir := $(call local-intermediates-dir) +gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared) + +# Make sure our deps are built first. +GYP_TARGET_DEPENDENCIES := + +### Rules for action "generate_jni_headers_from_jar_file": +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_local_path := $(LOCAL_PATH) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) +$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(PWD)/prebuilts/sdk/18/android.jar $(GYP_TARGET_DEPENDENCIES) + @echo "Gyp action: Generating JNI bindings from $(PWD)/prebuilts/sdk/18/android.jar/android/view/ViewConfiguration.class ($@)" + $(hide)cd $(gyp_local_path)/ui/gfx; mkdir -p $(gyp_shared_intermediate_dir)/ui/gfx/jni; ../../base/android/jni_generator/jni_generator.py -j "$(PWD)/prebuilts/sdk/18/android.jar" --input_file android/view/ViewConfiguration.class --output_dir "$(gyp_shared_intermediate_dir)/ui/gfx/jni" --optimize_generation 0 + + + +GYP_GENERATED_OUTPUTS := \ + $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h + +# Make sure our deps and generated files are built first. +LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS) + +LOCAL_GENERATED_SOURCES := \ + $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h + +GYP_COPIED_SOURCE_ORIGIN_DIRS := + +LOCAL_SRC_FILES := + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Debug := \ + --param=ssp-buffer-size=4 \ + -Werror \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -m32 \ + -mmmx \ + -march=pentium4 \ + -msse2 \ + -mfpmath=sse \ + -fuse-ld=gold \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -fno-stack-protector \ + -Os \ + -g \ + -fomit-frame-pointer \ + -fdata-sections \ + -ffunction-sections + +MY_DEFS_Debug := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \ + '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \ + '-D_DEBUG' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Debug := \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Debug := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +# Flags passed to both C and C++ files. +MY_CFLAGS_Release := \ + --param=ssp-buffer-size=4 \ + -Werror \ + -fno-exceptions \ + -fno-strict-aliasing \ + -Wall \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fvisibility=hidden \ + -pipe \ + -fPIC \ + -m32 \ + -mmmx \ + -march=pentium4 \ + -msse2 \ + -mfpmath=sse \ + -fuse-ld=gold \ + -ffunction-sections \ + -funwind-tables \ + -g \ + -fno-short-enums \ + -finline-limit=64 \ + -Wa,--noexecstack \ + -U_FORTIFY_SOURCE \ + -Wno-extra \ + -Wno-ignored-qualifiers \ + -Wno-type-limits \ + -fno-stack-protector \ + -Os \ + -fno-ident \ + -fdata-sections \ + -ffunction-sections \ + -fomit-frame-pointer \ + -fno-unwind-tables \ + -fno-asynchronous-unwind-tables + +MY_DEFS_Release := \ + '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ + '-D_FILE_OFFSET_BITS=64' \ + '-DNO_TCMALLOC' \ + '-DDISABLE_NACL' \ + '-DCHROMIUM_BUILD' \ + '-DUSE_LIBJPEG_TURBO=1' \ + '-DUSE_PROPRIETARY_CODECS' \ + '-DENABLE_CONFIGURATION_POLICY' \ + '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ + '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ + '-DUSE_OPENSSL=1' \ + '-DENABLE_EGLIMAGE=1' \ + '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ + '-DENABLE_MANAGED_USERS=1' \ + '-D__STDC_CONSTANT_MACROS' \ + '-D__STDC_FORMAT_MACROS' \ + '-DANDROID' \ + '-D__GNU_SOURCE=1' \ + '-DUSE_STLPORT=1' \ + '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \ + '-DCHROME_BUILD_ID=""' \ + '-DNDEBUG' \ + '-DNVALGRIND' \ + '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \ + '-D_FORTIFY_SOURCE=2' + + +# Include paths placed before CFLAGS/CPPFLAGS +LOCAL_C_INCLUDES_Release := \ + $(PWD)/frameworks/wilhelm/include \ + $(PWD)/bionic \ + $(PWD)/external/stlport/stlport + + +# Flags passed to only C++ (and not C) files. +LOCAL_CPPFLAGS_Release := \ + -fno-rtti \ + -fno-threadsafe-statics \ + -fvisibility-inlines-hidden \ + -Wsign-compare \ + -Wno-error=c++0x-compat \ + -Wno-non-virtual-dtor \ + -Wno-sign-promo + + +LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION)) +LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION)) +LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION)) +### Rules for final target. +# Add target alias to "gyp_all_modules" target. +.PHONY: gyp_all_modules +gyp_all_modules: ui_gfx_gfx_view_jni_headers_gyp + +# Alias gyp target name. +.PHONY: gfx_view_jni_headers +gfx_view_jni_headers: ui_gfx_gfx_view_jni_headers_gyp + +LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp +LOCAL_UNINSTALLABLE_MODULE := true + +include $(BUILD_SYSTEM)/base_rules.mk + +$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES) + $(hide) echo "Gyp timestamp: $@" + $(hide) mkdir -p $(dir $@) + $(hide) touch $@ diff --git a/ui/gfx/gpu_memory_buffer.h b/ui/gfx/gpu_memory_buffer.h index 17bb669385..4a7b142d17 100644 --- a/ui/gfx/gpu_memory_buffer.h +++ b/ui/gfx/gpu_memory_buffer.h @@ -18,7 +18,8 @@ namespace gfx { enum GpuMemoryBufferType { EMPTY_BUFFER, SHARED_MEMORY_BUFFER, - EGL_CLIENT_BUFFER + EGL_CLIENT_BUFFER, + IO_SURFACE_BUFFER }; struct GpuMemoryBufferHandle { @@ -28,6 +29,9 @@ struct GpuMemoryBufferHandle { #if defined(OS_ANDROID) , native_buffer(NULL) #endif +#if defined(OS_MACOSX) + , io_surface_id(0) +#endif { } bool is_null() const { return type == EMPTY_BUFFER; } @@ -36,6 +40,10 @@ struct GpuMemoryBufferHandle { #if defined(OS_ANDROID) EGLClientBuffer native_buffer; #endif +#if defined(OS_MACOSX) + uint32 io_surface_id; +#endif + }; // Interface for creating and accessing a zero-copy GPU memory buffer. diff --git a/ui/gfx/image/image_family.cc b/ui/gfx/image/image_family.cc index 4a43a92e01..6719bc1ab1 100644 --- a/ui/gfx/image/image_family.cc +++ b/ui/gfx/image/image_family.cc @@ -21,6 +21,8 @@ ImageFamily::const_iterator::const_iterator( const std::map<MapKey, gfx::Image>::const_iterator& other) : map_iterator_(other) {} +ImageFamily::const_iterator::~const_iterator() {} + ImageFamily::ImageFamily() {} ImageFamily::~ImageFamily() {} diff --git a/ui/gfx/image/image_family.h b/ui/gfx/image/image_family.h index 93e005d18d..c092b2a87c 100644 --- a/ui/gfx/image/image_family.h +++ b/ui/gfx/image/image_family.h @@ -48,6 +48,8 @@ class GFX_EXPORT ImageFamily { const_iterator(const const_iterator& other); + ~const_iterator(); + const_iterator& operator++() { ++map_iterator_; return *this; diff --git a/ui/gfx/pango_util.cc b/ui/gfx/pango_util.cc index c6f0b62f92..1f8ac261b5 100644 --- a/ui/gfx/pango_util.cc +++ b/ui/gfx/pango_util.cc @@ -226,7 +226,8 @@ static void SetupPangoLayoutWithoutFont( if (flags & Canvas::HIDE_PREFIX) { DCHECK_EQ(1, g_unichar_to_utf8(kAcceleratorChar, NULL)); base::string16 accelerator_removed = - RemoveAcceleratorChar(text, static_cast<char16>(kAcceleratorChar), + RemoveAcceleratorChar(text, + static_cast<base::char16>(kAcceleratorChar), NULL, NULL); utf8 = UTF16ToUTF8(accelerator_removed); } else { diff --git a/ui/gfx/platform_font.h b/ui/gfx/platform_font.h index d576bcdf06..bf470983e1 100644 --- a/ui/gfx/platform_font.h +++ b/ui/gfx/platform_font.h @@ -60,9 +60,12 @@ class GFX_EXPORT PlatformFont : public base::RefCounted<PlatformFont> { // Returns the style of the font. virtual int GetStyle() const = 0; - // Returns the font name in UTF-8. + // Returns the specified font name in UTF-8. virtual std::string GetFontName() const = 0; + // Returns the actually used font name in UTF-8. + virtual std::string GetActualFontNameForTesting() const = 0; + // Returns the font size in pixels. virtual int GetFontSize() const = 0; diff --git a/ui/gfx/platform_font_ios.h b/ui/gfx/platform_font_ios.h index 2b30955032..ed93a6b6e6 100644 --- a/ui/gfx/platform_font_ios.h +++ b/ui/gfx/platform_font_ios.h @@ -26,6 +26,7 @@ class PlatformFontIOS : public PlatformFont { virtual int GetExpectedTextWidth(int length) const OVERRIDE; virtual int GetStyle() const OVERRIDE; virtual std::string GetFontName() const OVERRIDE; + virtual std::string GetActualFontNameForTesting() const OVERRIDE; virtual int GetFontSize() const OVERRIDE; virtual NativeFont GetNativeFont() const OVERRIDE; diff --git a/ui/gfx/platform_font_ios.mm b/ui/gfx/platform_font_ios.mm index 92608d322c..32dcca4e39 100644 --- a/ui/gfx/platform_font_ios.mm +++ b/ui/gfx/platform_font_ios.mm @@ -76,6 +76,10 @@ std::string PlatformFontIOS::GetFontName() const { return font_name_; } +std::string PlatformFontIOS::GetActualFontNameForTesting() const { + return base::SysNSStringToUTF8([GetNativeFont() familyName]); +} + int PlatformFontIOS::GetFontSize() const { return font_size_; } diff --git a/ui/gfx/platform_font_mac.h b/ui/gfx/platform_font_mac.h index 02006c3be1..2f5f8deb3f 100644 --- a/ui/gfx/platform_font_mac.h +++ b/ui/gfx/platform_font_mac.h @@ -28,6 +28,7 @@ class PlatformFontMac : public PlatformFont { virtual int GetExpectedTextWidth(int length) const OVERRIDE; virtual int GetStyle() const OVERRIDE; virtual std::string GetFontName() const OVERRIDE; + virtual std::string GetActualFontNameForTesting() const OVERRIDE; virtual int GetFontSize() const OVERRIDE; virtual NativeFont GetNativeFont() const OVERRIDE; diff --git a/ui/gfx/platform_font_mac.mm b/ui/gfx/platform_font_mac.mm index fa9d589aff..877507eb47 100644 --- a/ui/gfx/platform_font_mac.mm +++ b/ui/gfx/platform_font_mac.mm @@ -126,6 +126,10 @@ std::string PlatformFontMac::GetFontName() const { return font_name_; } +std::string PlatformFontMac::GetActualFontNameForTesting() const { + return base::SysNSStringToUTF8([native_font_ familyName]); +} + int PlatformFontMac::GetFontSize() const { return font_size_; } diff --git a/ui/gfx/platform_font_ozone.cc b/ui/gfx/platform_font_ozone.cc index f93b7373e4..aef042a0c9 100644 --- a/ui/gfx/platform_font_ozone.cc +++ b/ui/gfx/platform_font_ozone.cc @@ -6,14 +6,17 @@ namespace gfx { +// static PlatformFont* PlatformFont::CreateDefault() { return NULL; } +// static PlatformFont* PlatformFont::CreateFromNativeFont(NativeFont native_font) { return NULL; } +// static PlatformFont* PlatformFont::CreateFromNameAndSize(const std::string& font_name, int font_size) { return NULL; diff --git a/ui/gfx/platform_font_pango.cc b/ui/gfx/platform_font_pango.cc index 020cc7f229..db1d7dce35 100644 --- a/ui/gfx/platform_font_pango.cc +++ b/ui/gfx/platform_font_pango.cc @@ -15,6 +15,7 @@ #include "base/strings/string_split.h" #include "base/strings/utf_string_conversions.h" #include "third_party/skia/include/core/SkPaint.h" +#include "third_party/skia/include/core/SkString.h" #include "third_party/skia/include/core/SkTypeface.h" #include "ui/gfx/canvas.h" #include "ui/gfx/font.h" @@ -215,6 +216,12 @@ std::string PlatformFontPango::GetFontName() const { return font_family_; } +std::string PlatformFontPango::GetActualFontNameForTesting() const { + SkString family_name; + typeface_->getFamilyName(&family_name); + return family_name.c_str(); +} + int PlatformFontPango::GetFontSize() const { return font_size_pixels_; } @@ -293,7 +300,7 @@ void PlatformFontPango::InitWithNameAndSize(const std::string& font_name, std::string fallback; skia::RefPtr<SkTypeface> typeface = skia::AdoptRef( - SkTypeface::CreateFromName(font_name.c_str(), SkTypeface::kNormal)); + SkTypeface::CreateFromName(font_name.c_str(), SkTypeface::kNormal)); if (!typeface) { // A non-scalable font such as .pcf is specified. Falls back to a default // scalable font. diff --git a/ui/gfx/platform_font_pango.h b/ui/gfx/platform_font_pango.h index 136bf671d4..739a633aa4 100644 --- a/ui/gfx/platform_font_pango.h +++ b/ui/gfx/platform_font_pango.h @@ -55,6 +55,7 @@ class GFX_EXPORT PlatformFontPango : public PlatformFont { virtual int GetExpectedTextWidth(int length) const OVERRIDE; virtual int GetStyle() const OVERRIDE; virtual std::string GetFontName() const OVERRIDE; + virtual std::string GetActualFontNameForTesting() const OVERRIDE; virtual int GetFontSize() const OVERRIDE; virtual NativeFont GetNativeFont() const OVERRIDE; @@ -75,8 +76,8 @@ class GFX_EXPORT PlatformFontPango : public PlatformFont { void InitWithNameAndSize(const std::string& font_name, int font_size); void InitWithTypefaceNameSizeAndStyle( const skia::RefPtr<SkTypeface>& typeface, - const std::string& name, - int size, + const std::string& font_family, + int font_size, int style); void InitFromPlatformFont(const PlatformFontPango* other); diff --git a/ui/gfx/platform_font_win.cc b/ui/gfx/platform_font_win.cc index a97da2eedc..0209be6673 100644 --- a/ui/gfx/platform_font_win.cc +++ b/ui/gfx/platform_font_win.cc @@ -167,6 +167,13 @@ std::string PlatformFontWin::GetFontName() const { return font_ref_->font_name(); } +std::string PlatformFontWin::GetActualFontNameForTesting() const { + // With the current implementation on Windows, HFontRef::font_name() returns + // the font name taken from the HFONT handle, but it's not the name that comes + // from the font's metadata. See http://crbug.com/327287 + return font_ref_->font_name(); +} + std::string PlatformFontWin::GetLocalizedFontName() const { base::win::ScopedCreateDC memory_dc(CreateCompatibleDC(NULL)); if (!memory_dc.Get()) diff --git a/ui/gfx/platform_font_win.h b/ui/gfx/platform_font_win.h index 035ce8ac13..4826f777ff 100644 --- a/ui/gfx/platform_font_win.h +++ b/ui/gfx/platform_font_win.h @@ -63,6 +63,7 @@ class GFX_EXPORT PlatformFontWin : public PlatformFont { virtual int GetExpectedTextWidth(int length) const OVERRIDE; virtual int GetStyle() const OVERRIDE; virtual std::string GetFontName() const OVERRIDE; + virtual std::string GetActualFontNameForTesting() const OVERRIDE; virtual int GetFontSize() const OVERRIDE; virtual NativeFont GetNativeFont() const OVERRIDE; diff --git a/ui/gfx/rect_base.h b/ui/gfx/rect_base.h index 4e7dd8596e..412836ced1 100644 --- a/ui/gfx/rect_base.h +++ b/ui/gfx/rect_base.h @@ -147,6 +147,12 @@ class GFX_EXPORT RectBase { // inside the rect, returns 0. Type ManhattanDistanceToPoint(const PointClass& point) const; + // Returns the manhattan distance between the contents of this rect and the + // contents of the given rect. That is, if the intersection of the two rects + // is non-empty then the function returns 0. If the rects share a side, it + // returns the smallest non-zero value appropriate for Type. + Type ManhattanInternalDistance(const Class& rect) const; + protected: RectBase(const PointClass& origin, const SizeClass& size) : origin_(origin), size_(size) {} diff --git a/ui/gfx/rect_base_impl.h b/ui/gfx/rect_base_impl.h index c6de71d548..52201691a1 100644 --- a/ui/gfx/rect_base_impl.h +++ b/ui/gfx/rect_base_impl.h @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <limits> + #include "ui/gfx/rect_base.h" #include "base/logging.h" @@ -330,4 +332,24 @@ Type RectBase<Class, PointClass, SizeClass, InsetsClass, VectorClass, Type>:: return x_distance + y_distance; } +template<typename Class, + typename PointClass, + typename SizeClass, + typename InsetsClass, + typename VectorClass, + typename Type> +Type RectBase<Class, PointClass, SizeClass, InsetsClass, VectorClass, Type>:: + ManhattanInternalDistance(const Class& rect) const { + Class c(x(), y(), width(), height()); + c.Union(rect); + + static const Type kEpsilon = std::numeric_limits<Type>::is_integer + ? 1 + : std::numeric_limits<Type>::epsilon(); + + Type x = std::max<Type>(0, c.width() - width() - rect.width() + kEpsilon); + Type y = std::max<Type>(0, c.height() - height() - rect.height() + kEpsilon); + return x + y; +} + } // namespace gfx diff --git a/ui/gfx/rect_unittest.cc b/ui/gfx/rect_unittest.cc index d62abb6c77..31a156b791 100644 --- a/ui/gfx/rect_unittest.cc +++ b/ui/gfx/rect_unittest.cc @@ -893,4 +893,44 @@ TEST(RectTest, ManhattanDistanceToPoint) { EXPECT_FLOAT_EQ(1.1f, f.ManhattanDistanceToPoint(PointF(0.f, 3.f))); } +TEST(RectTest, ManhattanInternalDistance) { + Rect i(0, 0, 400, 400); + EXPECT_EQ(0, i.ManhattanInternalDistance(gfx::Rect(-1, 0, 2, 1))); + EXPECT_EQ(1, i.ManhattanInternalDistance(gfx::Rect(400, 0, 1, 400))); + EXPECT_EQ(2, i.ManhattanInternalDistance(gfx::Rect(-100, -100, 100, 100))); + EXPECT_EQ(2, i.ManhattanInternalDistance(gfx::Rect(-101, 100, 100, 100))); + EXPECT_EQ(4, i.ManhattanInternalDistance(gfx::Rect(-101, -101, 100, 100))); + EXPECT_EQ(435, i.ManhattanInternalDistance(gfx::Rect(630, 603, 100, 100))); + + RectF f(0.0f, 0.0f, 400.0f, 400.0f); + static const float kEpsilon = std::numeric_limits<float>::epsilon(); + + EXPECT_FLOAT_EQ( + 0.0f, f.ManhattanInternalDistance(gfx::RectF(-1.0f, 0.0f, 2.0f, 1.0f))); + EXPECT_FLOAT_EQ( + kEpsilon, + f.ManhattanInternalDistance(gfx::RectF(400.0f, 0.0f, 1.0f, 400.0f))); + EXPECT_FLOAT_EQ(2.0f * kEpsilon, + f.ManhattanInternalDistance( + gfx::RectF(-100.0f, -100.0f, 100.0f, 100.0f))); + EXPECT_FLOAT_EQ( + 1.0f + kEpsilon, + f.ManhattanInternalDistance(gfx::RectF(-101.0f, 100.0f, 100.0f, 100.0f))); + EXPECT_FLOAT_EQ(2.0f + 2.0f * kEpsilon, + f.ManhattanInternalDistance( + gfx::RectF(-101.0f, -101.0f, 100.0f, 100.0f))); + EXPECT_FLOAT_EQ( + 433.0f + 2.0f * kEpsilon, + f.ManhattanInternalDistance(gfx::RectF(630.0f, 603.0f, 100.0f, 100.0f))); + + EXPECT_FLOAT_EQ( + 0.0f, f.ManhattanInternalDistance(gfx::RectF(-1.0f, 0.0f, 1.1f, 1.0f))); + EXPECT_FLOAT_EQ( + 0.1f + kEpsilon, + f.ManhattanInternalDistance(gfx::RectF(-1.5f, 0.0f, 1.4f, 1.0f))); + EXPECT_FLOAT_EQ( + kEpsilon, + f.ManhattanInternalDistance(gfx::RectF(-1.5f, 0.0f, 1.5f, 1.0f))); +} + } // namespace gfx diff --git a/ui/gfx/render_text.cc b/ui/gfx/render_text.cc index 8061e34293..e8e3436f11 100644 --- a/ui/gfx/render_text.cc +++ b/ui/gfx/render_text.cc @@ -28,7 +28,7 @@ namespace { // All chars are replaced by this char when the password style is set. // TODO(benrg): GTK uses the first of U+25CF, U+2022, U+2731, U+273A, '*' // that's available in the font (find_invisible_char() in gtkentry.c). -const char16 kPasswordReplacementChar = '*'; +const base::char16 kPasswordReplacementChar = '*'; // Default color used for the text and cursor. const SkColor kDefaultColor = SK_ColorBLACK; @@ -879,7 +879,7 @@ const BreakList<size_t>& RenderText::GetLineBreaks() { if (line_breaks_.max() != 0) return line_breaks_; - const string16& layout_text = GetLayoutText(); + const base::string16& layout_text = GetLayoutText(); const size_t text_length = layout_text.length(); line_breaks_.SetValue(0); line_breaks_.SetMax(text_length); diff --git a/ui/gfx/render_text.h b/ui/gfx/render_text.h index 09e8e8819a..8696d69056 100644 --- a/ui/gfx/render_text.h +++ b/ui/gfx/render_text.h @@ -354,12 +354,19 @@ class GFX_EXPORT RenderText { // Gets the SelectionModel from a visual point in local coordinates. virtual SelectionModel FindCursorPosition(const Point& point) = 0; - // Get the visual bounds of a cursor at |selection|. These bounds typically - // represent a vertical line, but if |insert_mode| is true they contain the - // bounds of the associated glyph. These bounds are in local coordinates, but - // may be outside the visible region if the text is longer than the textfield. - // Subsequent text, cursor, or bounds changes may invalidate returned values. - Rect GetCursorBounds(const SelectionModel& selection, bool insert_mode); + // Return true if cursor can appear in front of the character at |position|, + // which means it is a grapheme boundary or the first character in the text. + virtual bool IsCursorablePosition(size_t position) = 0; + + // Get the visual bounds of a cursor at |caret|. These bounds typically + // represent a vertical line if |insert_mode| is true. Pass false for + // |insert_mode| to retrieve the bounds of the associated glyph. These bounds + // are in local coordinates, but may be outside the visible region if the text + // is longer than the textfield. Subsequent text, cursor, or bounds changes + // may invalidate returned values. Note that |caret| must be placed at + // grapheme boundary, that is, |IsCursorablePosition(caret.caret_pos())| must + // return true. + Rect GetCursorBounds(const SelectionModel& caret, bool insert_mode); // Compute the current cursor bounds, panning the text to show the cursor in // the display rect if necessary. These bounds are in local coordinates. @@ -473,10 +480,6 @@ class GFX_EXPORT RenderText { virtual size_t TextIndexToLayoutIndex(size_t index) const = 0; virtual size_t LayoutIndexToTextIndex(size_t index) const = 0; - // Return true if cursor can appear in front of the character at |position|, - // which means it is a grapheme boundary or the first character in the text. - virtual bool IsCursorablePosition(size_t position) = 0; - // Reset the layout to be invalid. virtual void ResetLayout() = 0; @@ -541,6 +544,7 @@ class GFX_EXPORT RenderText { FRIEND_TEST_ALL_PREFIXES(RenderTextTest, Multiline_MinWidth); FRIEND_TEST_ALL_PREFIXES(RenderTextTest, Multiline_NormalWidth); FRIEND_TEST_ALL_PREFIXES(RenderTextTest, Multiline_SufficientWidth); + FRIEND_TEST_ALL_PREFIXES(RenderTextTest, Multiline_Newline); // Set the cursor to |position|, with the caret trailing the previous // grapheme, or if there is no previous grapheme, leading the cursor position. diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc index 35264c5500..c8c50d4281 100644 --- a/ui/gfx/render_text_unittest.cc +++ b/ui/gfx/render_text_unittest.cc @@ -8,6 +8,7 @@ #include "base/format_macros.h" #include "base/memory/scoped_ptr.h" +#include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "testing/gtest/include/gtest/gtest.h" @@ -1156,11 +1157,14 @@ TEST_F(RenderTextTest, StringSizeEmptyString) { } #endif // !defined(OS_MACOSX) -// Disabled. http://crbug.com/316955 -TEST_F(RenderTextTest, DISABLED_StringSizeRespectsFontListMetrics) { +TEST_F(RenderTextTest, StringSizeRespectsFontListMetrics) { // Check that Arial and Symbol have different font metrics. Font arial_font("Arial", 16); + ASSERT_EQ("arial", + StringToLowerASCII(arial_font.GetActualFontNameForTesting())); Font symbol_font("Symbol", 16); + ASSERT_EQ("symbol", + StringToLowerASCII(symbol_font.GetActualFontNameForTesting())); EXPECT_NE(arial_font.GetHeight(), symbol_font.GetHeight()); EXPECT_NE(arial_font.GetBaseline(), symbol_font.GetBaseline()); // "a" should be rendered with Arial, not with Symbol. @@ -1213,8 +1217,7 @@ TEST_F(RenderTextTest, SetFont) { EXPECT_EQ(12, render_text->GetPrimaryFont().GetFontSize()); } -// Disabled. http://crbug.com/316955 -TEST_F(RenderTextTest, DISABLED_SetFontList) { +TEST_F(RenderTextTest, SetFontList) { scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); render_text->SetFontList(FontList("Arial,Symbol, 13px")); const std::vector<Font>& fonts = render_text->font_list().GetFonts(); @@ -1733,6 +1736,53 @@ TEST_F(RenderTextTest, Multiline_SufficientWidth) { } } +TEST_F(RenderTextTest, Multiline_Newline) { + const struct { + const wchar_t* const text; + // Ranges of the characters on each line preceding the newline. + const Range first_line_char_range; + const Range second_line_char_range; + } kTestStrings[] = { + { L"abc\ndef", Range(0, 3), Range(4, 7) }, + { L"a \n b ", Range(0, 2), Range(3, 6) }, + { L"\n" , Range::InvalidRange(), Range::InvalidRange() } + }; + + scoped_ptr<RenderTextWin> render_text( + static_cast<RenderTextWin*>(RenderText::CreateInstance())); + render_text->SetDisplayRect(Rect(200, 1000)); + render_text->SetMultiline(true); + Canvas canvas; + + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestStrings); ++i) { + SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); + render_text->SetText(WideToUTF16(kTestStrings[i].text)); + render_text->Draw(&canvas); + + ASSERT_EQ(2U, render_text->lines_.size()); + + const Range first_expected_range = kTestStrings[i].first_line_char_range; + ASSERT_EQ(first_expected_range.IsValid() ? 2U : 1U, + render_text->lines_[0].segments.size()); + if (first_expected_range.IsValid()) + EXPECT_EQ(first_expected_range, + render_text->lines_[0].segments[0].char_range); + + const internal::LineSegment& newline_segment = + render_text->lines_[0].segments[first_expected_range.IsValid() ? 1 : 0]; + ASSERT_EQ(1U, newline_segment.char_range.length()); + EXPECT_EQ(L'\n', kTestStrings[i].text[newline_segment.char_range.start()]); + + const Range second_expected_range = kTestStrings[i].second_line_char_range; + ASSERT_EQ(second_expected_range.IsValid() ? 1U : 0U, + render_text->lines_[1].segments.size()); + if (second_expected_range.IsValid()) + EXPECT_EQ(second_expected_range, + render_text->lines_[1].segments[0].char_range); + } +} + + TEST_F(RenderTextTest, Win_BreakRunsByUnicodeBlocks) { scoped_ptr<RenderTextWin> render_text( static_cast<RenderTextWin*>(RenderText::CreateInstance())); diff --git a/ui/gfx/render_text_win.cc b/ui/gfx/render_text_win.cc index 01a04af76b..4afbc7fa71 100644 --- a/ui/gfx/render_text_win.cc +++ b/ui/gfx/render_text_win.cc @@ -159,13 +159,15 @@ Range CharRangeToGlyphRange(const internal::TextRun& run, // Starting from |start_char|, finds a suitable line break position at or before // |available_width| using word break info from |breaks|. If |empty_line| is // true, this function will not roll back to |start_char| and |*next_char| will -// be greater than |start_char| (to avoid constructing empty lines). +// be greater than |start_char| (to avoid constructing empty lines). Returns +// whether to skip the line before |*next_char|. // TODO(ckocagil): Do not break ligatures and diacritics. // TextRun::logical_clusters might help. // TODO(ckocagil): We might have to reshape after breaking at ligatures. // See whether resolving the TODO above resolves this too. // TODO(ckocagil): Do not reserve width for whitespace at the end of lines. -void BreakRunAtWidth(const internal::TextRun& run, +bool BreakRunAtWidth(const wchar_t* text, + const internal::TextRun& run, const BreakList<size_t>& breaks, size_t start_char, int available_width, @@ -180,6 +182,11 @@ void BreakRunAtWidth(const internal::TextRun& run, *width = 0; for (size_t i = start_char; i < run.range.end(); ++i) { + if (U16_IS_SINGLE(text[i]) && text[i] == L'\n') { + *next_char = i + 1; + return true; + } + // |word| holds the word boundary at or before |i|, and |next_word| holds // the word boundary right after |i|. Advance both |word| and |next_word| // when |i| reaches |next_word|. @@ -198,20 +205,24 @@ void BreakRunAtWidth(const internal::TextRun& run, if (*width > available_width) { if (!empty_line || word_width < *width) { + // Roll back one word. *width -= word_width; *next_char = std::max(word->first, start_char); } else if (char_width < *width) { + // Roll back one character. *width -= char_width; *next_char = i; } else { + // Continue from the next character. *next_char = i + 1; } - return; + return true; } } *next_char = run.range.end(); + return false; } // For segments in the same run, checks the continuity and order of |x_range| @@ -308,12 +319,14 @@ class LineBreaker { int min_baseline, int min_height, bool multiline, + const wchar_t* text, const BreakList<size_t>* words, const ScopedVector<TextRun>& runs) : max_width_(max_width), min_baseline_(min_baseline), min_height_(min_height), multiline_(multiline), + text_(text), words_(words), runs_(runs), text_x_(0), @@ -326,7 +339,16 @@ class LineBreaker { // Breaks the run at given |run_index| into Line structs. void AddRun(int run_index) { const TextRun* run = runs_[run_index]; - if (multiline_ && line_x_ + run->width > max_width_) + bool run_fits = !multiline_; + if (multiline_ && line_x_ + run->width <= max_width_) { + DCHECK(!run->range.is_empty()); + const wchar_t first_char = text_[run->range.start()]; + // Uniscribe always puts newline characters in their own runs. + if (!U16_IS_SINGLE(first_char) || first_char != L'\n') + run_fits = true; + } + + if (!run_fits) BreakRun(run_index); else AddSegment(run_index, run->range, run->width); @@ -362,10 +384,10 @@ class LineBreaker { // Break the run until it fits the current line. while (next_char < run->range.end()) { const size_t current_char = next_char; - BreakRunAtWidth(*run, *words_, current_char, max_width_ - line_x_, - line_x_ == 0, &width, &next_char); + const bool skip_line = BreakRunAtWidth(text_, *run, *words_, current_char, + max_width_ - line_x_, line_x_ == 0, &width, &next_char); AddSegment(run_index, Range(current_char, next_char), width); - if (next_char < run->range.end()) + if (skip_line) AdvanceLine(); } } @@ -449,6 +471,7 @@ class LineBreaker { const int min_baseline_; const int min_height_; const bool multiline_; + const wchar_t* text_; const BreakList<size_t>* const words_; const ScopedVector<TextRun>& runs_; @@ -747,6 +770,7 @@ void RenderTextWin::EnsureLayout() { internal::LineBreaker line_breaker(display_rect().width() - 1, font_list().GetBaseline(), font_list().GetHeight(), multiline(), + GetLayoutText().c_str(), multiline() ? &GetLineBreaks() : NULL, runs_); for (size_t i = 0; i < runs_.size(); ++i) diff --git a/ui/gfx/text_elider.cc b/ui/gfx/text_elider.cc index 8396b0f529..5b9469614f 100644 --- a/ui/gfx/text_elider.cc +++ b/ui/gfx/text_elider.cc @@ -34,16 +34,16 @@ namespace gfx { // U+2026 in utf8 const char kEllipsis[] = "\xE2\x80\xA6"; -const char16 kEllipsisUTF16[] = { 0x2026, 0 }; -const char16 kForwardSlash = '/'; +const base::char16 kEllipsisUTF16[] = { 0x2026, 0 }; +const base::char16 kForwardSlash = '/'; namespace { // Helper class to split + elide text, while respecting UTF16 surrogate pairs. class StringSlicer { public: - StringSlicer(const string16& text, - const string16& ellipsis, + StringSlicer(const base::string16& text, + const base::string16& ellipsis, bool elide_in_middle) : text_(text), ellipsis_(ellipsis), @@ -55,8 +55,9 @@ class StringSlicer { // beginning and end of the string; otherwise, the end of the string is // removed and only the beginning remains. If |insert_ellipsis| is true, // then an ellipsis character will be inserted at the cut point. - string16 CutString(size_t length, bool insert_ellipsis) { - const string16 ellipsis_text = insert_ellipsis ? ellipsis_ : string16(); + base::string16 CutString(size_t length, bool insert_ellipsis) { + const base::string16 ellipsis_text = insert_ellipsis ? ellipsis_ + : base::string16(); if (!elide_in_middle_) return text_.substr(0, FindValidBoundaryBefore(length)) + ellipsis_text; @@ -90,10 +91,10 @@ class StringSlicer { } // The text to be sliced. - const string16& text_; + const base::string16& text_; // Ellipsis string to use. - const string16& ellipsis_; + const base::string16& ellipsis_; // If true, the middle of the string will be elided. bool elide_in_middle_; @@ -103,12 +104,13 @@ class StringSlicer { // Build a path from the first |num_components| elements in |path_elements|. // Prepends |path_prefix|, appends |filename|, inserts ellipsis if appropriate. -string16 BuildPathFromComponents(const string16& path_prefix, - const std::vector<string16>& path_elements, - const string16& filename, - size_t num_components) { +base::string16 BuildPathFromComponents( + const base::string16& path_prefix, + const std::vector<base::string16>& path_elements, + const base::string16& filename, + size_t num_components) { // Add the initial elements of the path. - string16 path = path_prefix; + base::string16 path = path_prefix; // Build path from first |num_components| elements. for (size_t j = 0; j < num_components; ++j) @@ -116,7 +118,7 @@ string16 BuildPathFromComponents(const string16& path_prefix, // Add |filename|, ellipsis if necessary. if (num_components != (path_elements.size() - 1)) - path += string16(kEllipsisUTF16) + kForwardSlash; + path += base::string16(kEllipsisUTF16) + kForwardSlash; path += filename; return path; @@ -125,31 +127,32 @@ string16 BuildPathFromComponents(const string16& path_prefix, // Takes a prefix (Domain, or Domain+subdomain) and a collection of path // components and elides if possible. Returns a string containing the longest // possible elided path, or an empty string if elision is not possible. -string16 ElideComponentizedPath(const string16& url_path_prefix, - const std::vector<string16>& url_path_elements, - const string16& url_filename, - const string16& url_query, - const FontList& font_list, - float available_pixel_width) { +base::string16 ElideComponentizedPath( + const base::string16& url_path_prefix, + const std::vector<base::string16>& url_path_elements, + const base::string16& url_filename, + const base::string16& url_query, + const FontList& font_list, + float available_pixel_width) { const size_t url_path_number_of_elements = url_path_elements.size(); CHECK(url_path_number_of_elements); for (size_t i = url_path_number_of_elements - 1; i > 0; --i) { - string16 elided_path = BuildPathFromComponents(url_path_prefix, + base::string16 elided_path = BuildPathFromComponents(url_path_prefix, url_path_elements, url_filename, i); if (available_pixel_width >= GetStringWidthF(elided_path, font_list)) return ElideText(elided_path + url_query, font_list, available_pixel_width, ELIDE_AT_END); } - return string16(); + return base::string16(); } } // namespace -string16 ElideEmail(const string16& email, - const FontList& font_list, - float available_pixel_width) { +base::string16 ElideEmail(const base::string16& email, + const FontList& font_list, + float available_pixel_width) { if (GetStringWidthF(email, font_list) <= available_pixel_width) return email; @@ -159,14 +162,14 @@ string16 ElideEmail(const string16& email, // symbol in the domain part of the email however so splitting at the last @ // symbol is safe. const size_t split_index = email.find_last_of('@'); - DCHECK_NE(split_index, string16::npos); - string16 username = email.substr(0, split_index); - string16 domain = email.substr(split_index + 1); + DCHECK_NE(split_index, base::string16::npos); + base::string16 username = email.substr(0, split_index); + base::string16 domain = email.substr(split_index + 1); DCHECK(!username.empty()); DCHECK(!domain.empty()); // Subtract the @ symbol from the available width as it is mandatory. - const string16 kAtSignUTF16 = ASCIIToUTF16("@"); + const base::string16 kAtSignUTF16 = ASCIIToUTF16("@"); available_pixel_width -= GetStringWidthF(kAtSignUTF16, font_list); // Check whether eliding the domain is necessary: if eliding the username @@ -193,7 +196,7 @@ string16 ElideEmail(const string16& email, // Failing to elide the domain such that at least one character remains // (other than the ellipsis itself) remains: return a single ellipsis. if (domain.length() <= 1U) - return string16(kEllipsisUTF16); + return base::string16(kEllipsisUTF16); } // Fit the username in the remaining width (at this point the elided username @@ -210,13 +213,13 @@ string16 ElideEmail(const string16& email, // kerning/ligatures/etc. issues potentially wrong by assuming that the width of // a rendered string is always the sum of the widths of its substrings. Also I // suspect it could be made simpler. -string16 ElideUrl(const GURL& url, - const FontList& font_list, - float available_pixel_width, - const std::string& languages) { +base::string16 ElideUrl(const GURL& url, + const FontList& font_list, + float available_pixel_width, + const std::string& languages) { // Get a formatted string and corresponding parsing of the url. url_parse::Parsed parsed; - const string16 url_string = + const base::string16 url_string = net::FormatUrl(url, languages, net::kFormatUrlOmitAll, net::UnescapeRule::SPACES, &parsed, NULL, NULL); if (available_pixel_width <= 0) @@ -236,21 +239,21 @@ string16 ElideUrl(const GURL& url, // Get the path substring, including query and reference. const size_t path_start_index = parsed.path.begin; const size_t path_len = parsed.path.len; - string16 url_path_query_etc = url_string.substr(path_start_index); - string16 url_path = url_string.substr(path_start_index, path_len); + base::string16 url_path_query_etc = url_string.substr(path_start_index); + base::string16 url_path = url_string.substr(path_start_index, path_len); // Return general elided text if url minus the query fits. - const string16 url_minus_query = + const base::string16 url_minus_query = url_string.substr(0, path_start_index + path_len); if (available_pixel_width >= GetStringWidthF(url_minus_query, font_list)) return ElideText(url_string, font_list, available_pixel_width, ELIDE_AT_END); // Get Host. - string16 url_host = UTF8ToUTF16(url.host()); + base::string16 url_host = UTF8ToUTF16(url.host()); // Get domain and registry information from the URL. - string16 url_domain = UTF8ToUTF16( + base::string16 url_domain = UTF8ToUTF16( net::registry_controlled_domains::GetDomainAndRegistry( url, net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES)); if (url_domain.empty()) @@ -263,11 +266,11 @@ string16 ElideUrl(const GURL& url, } // Get sub domain. - string16 url_subdomain; + base::string16 url_subdomain; const size_t domain_start_index = url_host.find(url_domain); - if (domain_start_index != string16::npos) + if (domain_start_index != base::string16::npos) url_subdomain = url_host.substr(0, domain_start_index); - const string16 kWwwPrefix = UTF8ToUTF16("www."); + const base::string16 kWwwPrefix = UTF8ToUTF16("www."); if ((url_subdomain == kWwwPrefix || url_subdomain.empty() || url.SchemeIsFile())) { url_subdomain.clear(); @@ -278,14 +281,14 @@ string16 ElideUrl(const GURL& url, // domain is now C: - this is a nice hack for eliding to work pleasantly. if (url.SchemeIsFile()) { // Split the path string using ":" - std::vector<string16> file_path_split; + std::vector<base::string16> file_path_split; base::SplitString(url_path, ':', &file_path_split); if (file_path_split.size() > 1) { // File is of type "file:///C:/.." url_host.clear(); url_domain.clear(); url_subdomain.clear(); - const string16 kColon = UTF8ToUTF16(":"); + const base::string16 kColon = UTF8ToUTF16(":"); url_host = url_domain = file_path_split.at(0).substr(1) + kColon; url_path_query_etc = url_path = file_path_split.at(1); } @@ -309,9 +312,9 @@ string16 ElideUrl(const GURL& url, return url_subdomain + url_domain + url_path_query_etc; // Query element. - string16 url_query; + base::string16 url_query; const float kPixelWidthDotsTrailer = GetStringWidthF( - string16(kEllipsisUTF16), font_list); + base::string16(kEllipsisUTF16), font_list); if (parsed.query.is_nonempty()) { url_query = UTF8ToUTF16("?") + url_string.substr(parsed.query.begin); if (available_pixel_width >= @@ -323,14 +326,14 @@ string16 ElideUrl(const GURL& url, } // Parse url_path using '/'. - std::vector<string16> url_path_elements; + std::vector<base::string16> url_path_elements; base::SplitString(url_path, kForwardSlash, &url_path_elements); // Get filename - note that for a path ending with / // such as www.google.com/intl/ads/, the file name is ads/. size_t url_path_number_of_elements = url_path_elements.size(); DCHECK(url_path_number_of_elements != 0); - string16 url_filename; + base::string16 url_filename; if ((url_path_elements.at(url_path_number_of_elements - 1)).length() > 0) { url_filename = *(url_path_elements.end() - 1); } else if (url_path_number_of_elements > 1) { // Path ends with a '/'. @@ -350,12 +353,13 @@ string16 ElideUrl(const GURL& url, } // Start eliding the path and replacing elements by ".../". - const string16 kEllipsisAndSlash = string16(kEllipsisUTF16) + kForwardSlash; + const base::string16 kEllipsisAndSlash = + base::string16(kEllipsisUTF16) + kForwardSlash; const float pixel_width_ellipsis_slash = GetStringWidthF(kEllipsisAndSlash, font_list); // Check with both subdomain and domain. - string16 elided_path = + base::string16 elided_path = ElideComponentizedPath(url_subdomain + url_domain, url_path_elements, url_filename, url_query, font_list, available_pixel_width); @@ -367,7 +371,7 @@ string16 ElideUrl(const GURL& url, // This is added only if the subdomain pixel width is larger than // the pixel width of kEllipsis. Otherwise, subdomain remains, // which means that this case has been resolved earlier. - string16 url_elided_domain = url_subdomain + url_domain; + base::string16 url_elided_domain = url_subdomain + url_domain; if (pixel_width_url_subdomain > kPixelWidthDotsTrailer) { if (!url_subdomain.empty()) url_elided_domain = kEllipsisAndSlash[0] + url_domain; @@ -383,7 +387,7 @@ string16 ElideUrl(const GURL& url, } // Return elided domain/.../filename anyway. - string16 final_elided_url_string(url_elided_domain); + base::string16 final_elided_url_string(url_elided_domain); const float url_elided_domain_width = GetStringWidthF(url_elided_domain, font_list); @@ -391,7 +395,7 @@ string16 ElideUrl(const GURL& url, if ((available_pixel_width - url_elided_domain_width) > pixel_width_ellipsis_slash + kPixelWidthDotsTrailer + GetStringWidthF(ASCIIToUTF16("UV"), font_list)) { - final_elided_url_string += BuildPathFromComponents(string16(), + final_elided_url_string += BuildPathFromComponents(base::string16(), url_path_elements, url_filename, 1); } else { final_elided_url_string += url_path; @@ -401,19 +405,19 @@ string16 ElideUrl(const GURL& url, ELIDE_AT_END); } -string16 ElideFilename(const base::FilePath& filename, - const FontList& font_list, - float available_pixel_width) { +base::string16 ElideFilename(const base::FilePath& filename, + const FontList& font_list, + float available_pixel_width) { #if defined(OS_WIN) - string16 filename_utf16 = filename.value(); - string16 extension = filename.Extension(); - string16 rootname = filename.BaseName().RemoveExtension().value(); + base::string16 filename_utf16 = filename.value(); + base::string16 extension = filename.Extension(); + base::string16 rootname = filename.BaseName().RemoveExtension().value(); #elif defined(OS_POSIX) - string16 filename_utf16 = WideToUTF16(base::SysNativeMBToWide( + base::string16 filename_utf16 = WideToUTF16(base::SysNativeMBToWide( filename.value())); - string16 extension = WideToUTF16(base::SysNativeMBToWide( + base::string16 extension = WideToUTF16(base::SysNativeMBToWide( filename.Extension())); - string16 rootname = WideToUTF16(base::SysNativeMBToWide( + base::string16 rootname = WideToUTF16(base::SysNativeMBToWide( filename.BaseName().RemoveExtension().value())); #endif @@ -422,7 +426,7 @@ string16 ElideFilename(const base::FilePath& filename, return base::i18n::GetDisplayStringInLTRDirectionality(filename_utf16); if (rootname.empty() || extension.empty()) { - const string16 elided_name = ElideText(filename_utf16, font_list, + const base::string16 elided_name = ElideText(filename_utf16, font_list, available_pixel_width, ELIDE_AT_END); return base::i18n::GetDisplayStringInLTRDirectionality(elided_name); } @@ -432,28 +436,28 @@ string16 ElideFilename(const base::FilePath& filename, // We may have trimmed the path. if (root_width + ext_width <= available_pixel_width) { - const string16 elided_name = rootname + extension; + const base::string16 elided_name = rootname + extension; return base::i18n::GetDisplayStringInLTRDirectionality(elided_name); } if (ext_width >= available_pixel_width) { - const string16 elided_name = ElideText(rootname + extension, font_list, - available_pixel_width, - ELIDE_IN_MIDDLE); + const base::string16 elided_name = ElideText( + rootname + extension, font_list, available_pixel_width, + ELIDE_IN_MIDDLE); return base::i18n::GetDisplayStringInLTRDirectionality(elided_name); } float available_root_width = available_pixel_width - ext_width; - string16 elided_name = + base::string16 elided_name = ElideText(rootname, font_list, available_root_width, ELIDE_AT_END); elided_name += extension; return base::i18n::GetDisplayStringInLTRDirectionality(elided_name); } -string16 ElideText(const string16& text, - const FontList& font_list, - float available_pixel_width, - ElideBehavior elide_behavior) { +base::string16 ElideText(const base::string16& text, + const FontList& font_list, + float available_pixel_width, + ElideBehavior elide_behavior) { if (text.empty()) return text; @@ -461,7 +465,7 @@ string16 ElideText(const string16& text, const bool elide_in_middle = (elide_behavior == ELIDE_IN_MIDDLE); const bool insert_ellipsis = (elide_behavior != TRUNCATE_AT_END); - const string16 ellipsis = string16(kEllipsisUTF16); + const base::string16 ellipsis = base::string16(kEllipsisUTF16); StringSlicer slicer(text, ellipsis, elide_in_middle); // Pango will return 0 width for absurdly long strings. Cut the string in @@ -473,7 +477,7 @@ string16 ElideText(const string16& text, // (eliding way too much from a ridiculous string is probably still // ridiculous), but we should check other widths for bogus values as well. if (current_text_pixel_width <= 0 && !text.empty()) { - const string16 cut = slicer.CutString(text.length() / 2, false); + const base::string16 cut = slicer.CutString(text.length() / 2, false); return ElideText(cut, font_list, available_pixel_width, elide_behavior); } @@ -482,7 +486,7 @@ string16 ElideText(const string16& text, if (insert_ellipsis && GetStringWidthF(ellipsis, font_list) > available_pixel_width) - return string16(); + return base::string16(); // Use binary search to compute the elided text. size_t lo = 0; @@ -491,7 +495,7 @@ string16 ElideText(const string16& text, for (guess = (lo + hi) / 2; lo <= hi; guess = (lo + hi) / 2) { // We check the length of the whole desired string at once to ensure we // handle kerning/ligatures/etc. correctly. - const string16 cut = slicer.CutString(guess, insert_ellipsis); + const base::string16 cut = slicer.CutString(guess, insert_ellipsis); const float guess_length = GetStringWidthF(cut, font_list); // Check again that we didn't hit a Pango width overflow. If so, cut the // current string in half and start over. @@ -508,17 +512,17 @@ string16 ElideText(const string16& text, return slicer.CutString(guess, insert_ellipsis); } -string16 ElideText(const string16& text, - const Font& font, - float available_pixel_width, - ElideBehavior elide_behavior) { +base::string16 ElideText(const base::string16& text, + const Font& font, + float available_pixel_width, + ElideBehavior elide_behavior) { return ElideText(text, FontList(font), available_pixel_width, elide_behavior); } SortedDisplayURL::SortedDisplayURL(const GURL& url, const std::string& languages) { net::AppendFormattedHost(url, languages, &sort_host_); - string16 host_minus_www = net::StripWWW(sort_host_); + base::string16 host_minus_www = net::StripWWW(sort_host_); url_parse::Parsed parsed; display_url_ = net::FormatUrl(url, languages, net::kFormatUrlOmitAll, @@ -550,8 +554,8 @@ int SortedDisplayURL::Compare(const SortedDisplayURL& other, return host_compare_result; // Hosts match, compare on the portion of the url after the host. - string16 path = this->AfterHost(); - string16 o_path = other.AfterHost(); + base::string16 path = this->AfterHost(); + base::string16 o_path = other.AfterHost(); compare_status = U_ZERO_ERROR; UCollationResult path_compare_result = collator->compare( static_cast<const UChar*>(path.c_str()), @@ -576,16 +580,17 @@ int SortedDisplayURL::Compare(const SortedDisplayURL& other, return display_url_compare_result; } -string16 SortedDisplayURL::AfterHost() const { +base::string16 SortedDisplayURL::AfterHost() const { const size_t slash_index = display_url_.find(sort_host_, prefix_end_); - if (slash_index == string16::npos) { + if (slash_index == base::string16::npos) { NOTREACHED(); - return string16(); + return base::string16(); } return display_url_.substr(slash_index + sort_host_.length()); } -bool ElideString(const string16& input, int max_len, string16* output) { +bool ElideString(const base::string16& input, int max_len, + base::string16* output) { DCHECK_GE(max_len, 0); if (static_cast<int>(input.length()) <= max_len) { output->assign(input); @@ -630,7 +635,7 @@ namespace { class RectangleString { public: RectangleString(size_t max_rows, size_t max_cols, - bool strict, string16 *output) + bool strict, base::string16 *output) : max_rows_(max_rows), max_cols_(max_cols), current_row_(0), @@ -647,7 +652,7 @@ class RectangleString { // AddString() may be called multiple times to concatenate together // multiple strings into the region (the current caller doesn't do // this, however). - void AddString(const string16& input); + void AddString(const base::string16& input); // Perform any deferred output processing. Must be called after the // last AddString() call has occurred. @@ -656,15 +661,15 @@ class RectangleString { private: // Add a line to the rectangular region at the current position, // either by itself or by breaking it into words. - void AddLine(const string16& line); + void AddLine(const base::string16& line); // Add a word to the rectangular region at the current position, // either by itself or by breaking it into characters. - void AddWord(const string16& word); + void AddWord(const base::string16& word); // Add text to the output string if the rectangular boundaries // have not been exceeded, advancing the current position. - void Append(const string16& string); + void Append(const base::string16& string); // Set the current position to the beginning of the next line. If // |output| is true, add a newline to the output string if the rectangular @@ -696,12 +701,12 @@ class RectangleString { bool suppressed_; // String onto which the output is accumulated. - string16* output_; + base::string16* output_; DISALLOW_COPY_AND_ASSIGN(RectangleString); }; -void RectangleString::AddString(const string16& input) { +void RectangleString::AddString(const base::string16& input) { base::i18n::BreakIterator lines(input, base::i18n::BreakIterator::BREAK_NEWLINE); if (lines.Init()) { @@ -720,7 +725,7 @@ bool RectangleString::Finalize() { return false; } -void RectangleString::AddLine(const string16& line) { +void RectangleString::AddLine(const base::string16& line) { if (line.length() < max_cols_) { Append(line); } else { @@ -738,7 +743,7 @@ void RectangleString::AddLine(const string16& line) { current_col_ = 0; } -void RectangleString::AddWord(const string16& word) { +void RectangleString::AddWord(const base::string16& word) { if (word.length() < max_cols_) { // Word can be made to fit, no need to fragment it. if (current_col_ + word.length() >= max_cols_) @@ -765,7 +770,7 @@ void RectangleString::AddWord(const string16& word) { } } -void RectangleString::Append(const string16& string) { +void RectangleString::Append(const base::string16& string) { if (current_row_ < max_rows_) output_->append(string); else @@ -793,7 +798,7 @@ class RectangleText { float available_pixel_width, int available_pixel_height, WordWrapBehavior wrap_behavior, - std::vector<string16>* lines) + std::vector<base::string16>* lines) : font_list_(font_list), line_height_(font_list.GetHeight()), available_pixel_width_(available_pixel_width), @@ -814,7 +819,7 @@ class RectangleText { // AddString() may be called multiple times to concatenate together // multiple strings into the region (the current caller doesn't do // this, however). - void AddString(const string16& input); + void AddString(const base::string16& input); // Perform any deferred output processing. Must be called after the last // AddString() call has occured. Returns a combination of @@ -825,24 +830,24 @@ class RectangleText { private: // Add a line to the rectangular region at the current position, // either by itself or by breaking it into words. - void AddLine(const string16& line); + void AddLine(const base::string16& line); // Wrap the specified word across multiple lines. - int WrapWord(const string16& word); + int WrapWord(const base::string16& word); // Add a long word - wrapping, eliding or truncating per the wrap behavior. - int AddWordOverflow(const string16& word); + int AddWordOverflow(const base::string16& word); // Add a word to the rectangluar region at the current position. - int AddWord(const string16& word); + int AddWord(const base::string16& word); // Append the specified |text| to the current output line, incrementing the // running width by the specified amount. This is an optimization over // |AddToCurrentLine()| when |text_width| is already known. - void AddToCurrentLineWithWidth(const string16& text, float text_width); + void AddToCurrentLineWithWidth(const base::string16& text, float text_width); // Append the specified |text| to the current output line. - void AddToCurrentLine(const string16& text); + void AddToCurrentLine(const base::string16& text); // Set the current position to the beginning of the next line. bool NewLine(); @@ -869,13 +874,13 @@ class RectangleText { int current_height_; // The current line of text. - string16 current_line_; + base::string16 current_line_; // Indicates whether the last line ended with \n. bool last_line_ended_in_lf_; // The output vector of lines. - std::vector<string16>* lines_; + std::vector<base::string16>* lines_; // Indicates whether a word was so long that it had to be truncated or elided // to fit the available width. @@ -887,12 +892,12 @@ class RectangleText { DISALLOW_COPY_AND_ASSIGN(RectangleText); }; -void RectangleText::AddString(const string16& input) { +void RectangleText::AddString(const base::string16& input) { base::i18n::BreakIterator lines(input, base::i18n::BreakIterator::BREAK_NEWLINE); if (lines.Init()) { while (!insufficient_height_ && lines.Advance()) { - string16 line = lines.GetString(); + base::string16 line = lines.GetString(); // The BREAK_NEWLINE iterator will keep the trailing newline character, // except in the case of the last line, which may not have one. Remove // the newline character, if it exists. @@ -915,12 +920,12 @@ int RectangleText::Finalize() { lines_->pop_back(); } if (last_line_ended_in_lf_) - lines_->push_back(string16()); + lines_->push_back(base::string16()); return (insufficient_width_ ? INSUFFICIENT_SPACE_HORIZONTAL : 0) | (insufficient_height_ ? INSUFFICIENT_SPACE_VERTICAL : 0); } -void RectangleText::AddLine(const string16& line) { +void RectangleText::AddLine(const base::string16& line) { const float line_width = GetStringWidthF(line, font_list_); if (line_width <= available_pixel_width_) { AddToCurrentLineWithWidth(line, line_width); @@ -932,7 +937,7 @@ void RectangleText::AddLine(const string16& line) { if (words.Init()) { while (words.Advance()) { const bool truncate = !current_line_.empty(); - const string16& word = words.GetString(); + const base::string16& word = words.GetString(); const int lines_added = AddWord(word); if (lines_added) { if (truncate) { @@ -955,13 +960,13 @@ void RectangleText::AddLine(const string16& line) { NewLine(); } -int RectangleText::WrapWord(const string16& word) { +int RectangleText::WrapWord(const base::string16& word) { // Word is so wide that it must be fragmented. - string16 text = word; + base::string16 text = word; int lines_added = 0; bool first_fragment = true; while (!insufficient_height_ && !text.empty()) { - string16 fragment = + base::string16 fragment = ElideText(text, font_list_, available_pixel_width_, TRUNCATE_AT_END); // At least one character has to be added at every line, even if the @@ -977,7 +982,7 @@ int RectangleText::WrapWord(const string16& word) { return lines_added; } -int RectangleText::AddWordOverflow(const string16& word) { +int RectangleText::AddWordOverflow(const base::string16& word) { int lines_added = 0; // Unless this is the very first word, put it on a new line. @@ -995,7 +1000,7 @@ int RectangleText::AddWordOverflow(const string16& word) { } else { const ElideBehavior elide_behavior = (wrap_behavior_ == ELIDE_LONG_WORDS ? ELIDE_AT_END : TRUNCATE_AT_END); - const string16 elided_word = + const base::string16 elided_word = ElideText(word, font_list_, available_pixel_width_, elide_behavior); AddToCurrentLine(elided_word); insufficient_width_ = true; @@ -1004,9 +1009,9 @@ int RectangleText::AddWordOverflow(const string16& word) { return lines_added; } -int RectangleText::AddWord(const string16& word) { +int RectangleText::AddWord(const base::string16& word) { int lines_added = 0; - string16 trimmed; + base::string16 trimmed; TrimWhitespace(word, TRIM_TRAILING, &trimmed); const float trimmed_width = GetStringWidthF(trimmed, font_list_); if (trimmed_width <= available_pixel_width_) { @@ -1022,11 +1027,11 @@ int RectangleText::AddWord(const string16& word) { return lines_added; } -void RectangleText::AddToCurrentLine(const string16& text) { +void RectangleText::AddToCurrentLine(const base::string16& text) { AddToCurrentLineWithWidth(text, GetStringWidthF(text, font_list_)); } -void RectangleText::AddToCurrentLineWithWidth(const string16& text, +void RectangleText::AddToCurrentLineWithWidth(const base::string16& text, float text_width) { if (current_height_ >= available_pixel_height_) { insufficient_height_ = true; @@ -1052,20 +1057,21 @@ bool RectangleText::NewLine() { } // namespace -bool ElideRectangleString(const string16& input, size_t max_rows, - size_t max_cols, bool strict, string16* output) { +bool ElideRectangleString(const base::string16& input, size_t max_rows, + size_t max_cols, bool strict, + base::string16* output) { RectangleString rect(max_rows, max_cols, strict, output); rect.Init(); rect.AddString(input); return rect.Finalize(); } -int ElideRectangleText(const string16& input, +int ElideRectangleText(const base::string16& input, const FontList& font_list, float available_pixel_width, int available_pixel_height, WordWrapBehavior wrap_behavior, - std::vector<string16>* lines) { + std::vector<base::string16>* lines) { RectangleText rect(font_list, available_pixel_width, available_pixel_height, @@ -1076,19 +1082,19 @@ int ElideRectangleText(const string16& input, return rect.Finalize(); } -string16 TruncateString(const string16& string, size_t length) { +base::string16 TruncateString(const base::string16& string, size_t length) { if (string.size() <= length) // String fits, return it. return string; if (length == 0) // No room for the elide string, return an empty string. - return string16(); + return base::string16(); size_t max = length - 1; // Added to the end of strings that are too big. - static const char16 kElideString[] = { 0x2026, 0 }; + static const base::char16 kElideString[] = { 0x2026, 0 }; if (max == 0) // Just enough room for the elide string. diff --git a/ui/gfx/text_elider.h b/ui/gfx/text_elider.h index 95bdeb44b0..4eaca828c7 100644 --- a/ui/gfx/text_elider.h +++ b/ui/gfx/text_elider.h @@ -27,7 +27,7 @@ class Font; class FontList; GFX_EXPORT extern const char kEllipsis[]; -GFX_EXPORT extern const char16 kEllipsisUTF16[]; +GFX_EXPORT extern const base::char16 kEllipsisUTF16[]; // Elides a well-formed email address (e.g. username@domain.com) to fit into // |available_pixel_width| using the specified |font_list|. @@ -39,9 +39,9 @@ GFX_EXPORT extern const char16 kEllipsisUTF16[]; // equally with the elided username (should the username be short enough that it // doesn't need half the available width: the elided domain will occupy that // extra width). -GFX_EXPORT string16 ElideEmail(const string16& email, - const gfx::FontList& font_list, - float available_pixel_width); +GFX_EXPORT base::string16 ElideEmail(const base::string16& email, + const gfx::FontList& font_list, + float available_pixel_width); // This function takes a GURL object and elides it. It returns a string // which composed of parts from subdomain, domain, path, filename and query. @@ -57,10 +57,10 @@ GFX_EXPORT string16 ElideEmail(const string16& email, // as an LTR string (using base::i18n::WrapStringWithLTRFormatting()) so that it // is displayed properly in an RTL context. Please refer to // http://crbug.com/6487 for more information. -GFX_EXPORT string16 ElideUrl(const GURL& url, - const gfx::FontList& font_list, - float available_pixel_width, - const std::string& languages); +GFX_EXPORT base::string16 ElideUrl(const GURL& url, + const gfx::FontList& font_list, + float available_pixel_width, + const std::string& languages); enum ElideBehavior { // Add ellipsis at the end of the string. @@ -73,15 +73,15 @@ enum ElideBehavior { // Elides |text| to fit in |available_pixel_width| according to the specified // |elide_behavior|. -GFX_EXPORT string16 ElideText(const string16& text, - const gfx::FontList& font_list, - float available_pixel_width, - ElideBehavior elide_behavior); +GFX_EXPORT base::string16 ElideText(const base::string16& text, + const gfx::FontList& font_list, + float available_pixel_width, + ElideBehavior elide_behavior); // Obsolete version. Use the above version which takes gfx::FontList. -GFX_EXPORT string16 ElideText(const string16& text, - const gfx::Font& font, - float available_pixel_width, - ElideBehavior elide_behavior); +GFX_EXPORT base::string16 ElideText(const base::string16& text, + const gfx::Font& font, + float available_pixel_width, + ElideBehavior elide_behavior); // Elide a filename to fit a given pixel width, with an emphasis on not hiding // the extension unless we have to. If filename contains a path, the path will @@ -89,9 +89,9 @@ GFX_EXPORT string16 ElideText(const string16& text, // filename is forced to have LTR directionality, which means that in RTL UI // the elided filename is wrapped with LRE (Left-To-Right Embedding) mark and // PDF (Pop Directional Formatting) mark. -GFX_EXPORT string16 ElideFilename(const base::FilePath& filename, - const gfx::FontList& font_list, - float available_pixel_width); +GFX_EXPORT base::string16 ElideFilename(const base::FilePath& filename, + const gfx::FontList& font_list, + float available_pixel_width); // SortedDisplayURL maintains a string from a URL suitable for display to the // use. SortedDisplayURL also provides a function used for comparing two @@ -110,20 +110,20 @@ class GFX_EXPORT SortedDisplayURL { int Compare(const SortedDisplayURL& other, icu::Collator* collator) const; // Returns the display string for the URL. - const string16& display_url() const { return display_url_; } + const base::string16& display_url() const { return display_url_; } private: // Returns everything after the host. This is used by Compare if the hosts // match. - string16 AfterHost() const; + base::string16 AfterHost() const; // Host name minus 'www.'. Used by Compare. - string16 sort_host_; + base::string16 sort_host_; // End of the prefix (spec and separator) in display_url_. size_t prefix_end_; - string16 display_url_; + base::string16 display_url_; DISALLOW_COPY_AND_ASSIGN(SortedDisplayURL); }; @@ -141,8 +141,8 @@ class GFX_EXPORT SortedDisplayURL { // puts "Hell...Tom" in str and returns true. // TODO(tsepez): Doesn't handle UTF-16 surrogate pairs properly. // TODO(tsepez): Doesn't handle bidi properly. -GFX_EXPORT bool ElideString(const string16& input, int max_len, - string16* output); +GFX_EXPORT bool ElideString(const base::string16& input, int max_len, + base::string16* output); // Reformat |input| into |output| so that it fits into a |max_rows| by // |max_cols| rectangle of characters. Input newlines are respected, but @@ -153,9 +153,11 @@ GFX_EXPORT bool ElideString(const string16& input, int max_len, // intra-word (respecting UTF-16 surrogate pairs) as necssary. Truncation // (indicated by an added 3 dots) occurs if the result is still too long. // Returns true if the input had to be truncated (and not just reformatted). -GFX_EXPORT bool ElideRectangleString(const string16& input, size_t max_rows, - size_t max_cols, bool strict, - string16* output); +GFX_EXPORT bool ElideRectangleString(const base::string16& input, + size_t max_rows, + size_t max_cols, + bool strict, + base::string16* output); // Specifies the word wrapping behavior of |ElideRectangleText()| when a word // would exceed the available width. @@ -193,19 +195,20 @@ enum ReformattingResultFlags { // param. Returns a combination of |ReformattingResultFlags| that indicate // whether the given rectangle had insufficient space to accommodate |texŧ|, // leading to elision or truncation (and not just reformatting). -GFX_EXPORT int ElideRectangleText(const string16& text, +GFX_EXPORT int ElideRectangleText(const base::string16& text, const gfx::FontList& font_list, float available_pixel_width, int available_pixel_height, WordWrapBehavior wrap_behavior, - std::vector<string16>* lines); + std::vector<base::string16>* lines); // Truncates the string to length characters. This breaks the string at // the first word break before length, adding the horizontal ellipsis // character (unicode character 0x2026) to render ... // The supplied string is returned if the string has length characters or // less. -GFX_EXPORT string16 TruncateString(const string16& string, size_t length); +GFX_EXPORT base::string16 TruncateString(const base::string16& string, + size_t length); } // namespace gfx diff --git a/ui/gfx/utf16_indexing.cc b/ui/gfx/utf16_indexing.cc index 6af10c1849..c7f38de0d1 100644 --- a/ui/gfx/utf16_indexing.cc +++ b/ui/gfx/utf16_indexing.cc @@ -9,12 +9,12 @@ namespace gfx { -bool IsValidCodePointIndex(const string16& s, size_t index) { +bool IsValidCodePointIndex(const base::string16& s, size_t index) { return index == 0 || index == s.length() || !(CBU16_IS_TRAIL(s[index]) && CBU16_IS_LEAD(s[index - 1])); } -ptrdiff_t UTF16IndexToOffset(const string16& s, size_t base, size_t pos) { +ptrdiff_t UTF16IndexToOffset(const base::string16& s, size_t base, size_t pos) { // The indices point between UTF-16 words (range 0 to s.length() inclusive). // In order to consistently handle indices that point to the middle of a // surrogate pair, we count the first word in that surrogate pair and not @@ -30,7 +30,9 @@ ptrdiff_t UTF16IndexToOffset(const string16& s, size_t base, size_t pos) { return delta; } -size_t UTF16OffsetToIndex(const string16& s, size_t base, ptrdiff_t offset) { +size_t UTF16OffsetToIndex(const base::string16& s, + size_t base, + ptrdiff_t offset) { DCHECK_LE(base, s.length()); // As in UTF16IndexToOffset, we count the first half of a surrogate pair, not // the second. When stepping from pos to pos+1 we check s[pos:pos+1] == s[pos] diff --git a/ui/gfx/utf16_indexing.h b/ui/gfx/utf16_indexing.h index a9eaea2dd9..4c2b2c19d5 100644 --- a/ui/gfx/utf16_indexing.h +++ b/ui/gfx/utf16_indexing.h @@ -12,7 +12,7 @@ namespace gfx { // Returns false if s[index-1] is a high surrogate and s[index] is a low // surrogate, true otherwise. -GFX_EXPORT bool IsValidCodePointIndex(const string16& s, size_t index); +GFX_EXPORT bool IsValidCodePointIndex(const base::string16& s, size_t index); // |UTF16IndexToOffset| returns the number of code points between |base| and // |pos| in the given string. |UTF16OffsetToIndex| returns the index that is @@ -37,10 +37,10 @@ GFX_EXPORT bool IsValidCodePointIndex(const string16& s, size_t index); // Always, // UTF16IndexToOffset(s, base, UTF16OffsetToIndex(s, base, ofs)) == ofs // UTF16IndexToOffset(s, i, j) == -UTF16IndexToOffset(s, j, i) -GFX_EXPORT ptrdiff_t UTF16IndexToOffset(const string16& s, +GFX_EXPORT ptrdiff_t UTF16IndexToOffset(const base::string16& s, size_t base, size_t pos); -GFX_EXPORT size_t UTF16OffsetToIndex(const string16& s, +GFX_EXPORT size_t UTF16OffsetToIndex(const base::string16& s, size_t base, ptrdiff_t offset); diff --git a/ui/gl/gl.gyp b/ui/gl/gl.gyp index 4aa5f70714..da89782ced 100644 --- a/ui/gl/gl.gyp +++ b/ui/gl/gl.gyp @@ -254,6 +254,8 @@ 'sources': [ 'gl_context_cgl.cc', 'gl_context_cgl.h', + 'gl_image_io_surface.cc', + 'gl_image_io_surface.h', 'gl_surface_cgl.cc', 'gl_surface_cgl.h', 'gl_context_nsview.mm', diff --git a/ui/gl/gl.target.darwin-arm.mk b/ui/gl/gl.target.darwin-arm.mk index 30fb91e4e1..02a12dca21 100644 --- a/ui/gl/gl.target.darwin-arm.mk +++ b/ui/gl/gl.target.darwin-arm.mk @@ -173,6 +173,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -182,9 +183,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGL_IMPLEMENTATION' \ '-DGL_GLEXT_PROTOTYPES' \ @@ -215,8 +218,8 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH)/third_party/swiftshader/include \ $(LOCAL_PATH)/third_party/mesa/src/include \ @@ -291,6 +294,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -300,9 +304,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGL_IMPLEMENTATION' \ '-DGL_GLEXT_PROTOTYPES' \ @@ -334,8 +340,8 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH)/third_party/swiftshader/include \ $(LOCAL_PATH)/third_party/mesa/src/include \ diff --git a/ui/gl/gl.target.darwin-mips.mk b/ui/gl/gl.target.darwin-mips.mk index 40d7e00e2c..010aeb46d5 100644 --- a/ui/gl/gl.target.darwin-mips.mk +++ b/ui/gl/gl.target.darwin-mips.mk @@ -172,6 +172,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -181,9 +182,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGL_IMPLEMENTATION' \ '-DGL_GLEXT_PROTOTYPES' \ @@ -214,8 +217,8 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH)/third_party/swiftshader/include \ $(LOCAL_PATH)/third_party/mesa/src/include \ @@ -289,6 +292,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -298,9 +302,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGL_IMPLEMENTATION' \ '-DGL_GLEXT_PROTOTYPES' \ @@ -332,8 +338,8 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH)/third_party/swiftshader/include \ $(LOCAL_PATH)/third_party/mesa/src/include \ diff --git a/ui/gl/gl.target.darwin-x86.mk b/ui/gl/gl.target.darwin-x86.mk index ae32bcd6f2..fabc91edb2 100644 --- a/ui/gl/gl.target.darwin-x86.mk +++ b/ui/gl/gl.target.darwin-x86.mk @@ -175,6 +175,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -184,9 +185,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGL_IMPLEMENTATION' \ '-DGL_GLEXT_PROTOTYPES' \ @@ -217,8 +220,8 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH)/third_party/swiftshader/include \ $(LOCAL_PATH)/third_party/mesa/src/include \ @@ -296,6 +299,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -305,9 +309,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGL_IMPLEMENTATION' \ '-DGL_GLEXT_PROTOTYPES' \ @@ -339,8 +345,8 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH)/third_party/swiftshader/include \ $(LOCAL_PATH)/third_party/mesa/src/include \ diff --git a/ui/gl/gl.target.linux-arm.mk b/ui/gl/gl.target.linux-arm.mk index 30fb91e4e1..02a12dca21 100644 --- a/ui/gl/gl.target.linux-arm.mk +++ b/ui/gl/gl.target.linux-arm.mk @@ -173,6 +173,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -182,9 +183,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGL_IMPLEMENTATION' \ '-DGL_GLEXT_PROTOTYPES' \ @@ -215,8 +218,8 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH)/third_party/swiftshader/include \ $(LOCAL_PATH)/third_party/mesa/src/include \ @@ -291,6 +294,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -300,9 +304,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGL_IMPLEMENTATION' \ '-DGL_GLEXT_PROTOTYPES' \ @@ -334,8 +340,8 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH)/third_party/swiftshader/include \ $(LOCAL_PATH)/third_party/mesa/src/include \ diff --git a/ui/gl/gl.target.linux-mips.mk b/ui/gl/gl.target.linux-mips.mk index 40d7e00e2c..010aeb46d5 100644 --- a/ui/gl/gl.target.linux-mips.mk +++ b/ui/gl/gl.target.linux-mips.mk @@ -172,6 +172,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -181,9 +182,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGL_IMPLEMENTATION' \ '-DGL_GLEXT_PROTOTYPES' \ @@ -214,8 +217,8 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH)/third_party/swiftshader/include \ $(LOCAL_PATH)/third_party/mesa/src/include \ @@ -289,6 +292,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -298,9 +302,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGL_IMPLEMENTATION' \ '-DGL_GLEXT_PROTOTYPES' \ @@ -332,8 +338,8 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH)/third_party/swiftshader/include \ $(LOCAL_PATH)/third_party/mesa/src/include \ diff --git a/ui/gl/gl.target.linux-x86.mk b/ui/gl/gl.target.linux-x86.mk index ae32bcd6f2..fabc91edb2 100644 --- a/ui/gl/gl.target.linux-x86.mk +++ b/ui/gl/gl.target.linux-x86.mk @@ -175,6 +175,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -184,9 +185,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGL_IMPLEMENTATION' \ '-DGL_GLEXT_PROTOTYPES' \ @@ -217,8 +220,8 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH)/third_party/swiftshader/include \ $(LOCAL_PATH)/third_party/mesa/src/include \ @@ -296,6 +299,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -305,9 +309,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DGL_IMPLEMENTATION' \ '-DGL_GLEXT_PROTOTYPES' \ @@ -339,8 +345,8 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH)/third_party/swiftshader/include \ $(LOCAL_PATH)/third_party/mesa/src/include \ diff --git a/ui/gl/gl_image_io_surface.cc b/ui/gl/gl_image_io_surface.cc new file mode 100644 index 0000000000..23a7777898 --- /dev/null +++ b/ui/gl/gl_image_io_surface.cc @@ -0,0 +1,79 @@ +// Copyright 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. + +#include "ui/gl/gl_image_io_surface.h" + +#include "ui/gl/gl_bindings.h" +#include "ui/gl/gl_context.h" +#include "ui/gl/io_surface_support_mac.h" + +namespace gfx { + +GLImageIOSurface::GLImageIOSurface(gfx::Size size) + : io_surface_support_(IOSurfaceSupport::Initialize()), + size_(size) { + CHECK(io_surface_support_); +} + +GLImageIOSurface::~GLImageIOSurface() { + Destroy(); +} + +bool GLImageIOSurface::Initialize(gfx::GpuMemoryBufferHandle buffer) { + io_surface_.reset(io_surface_support_->IOSurfaceLookup(buffer.io_surface_id)); + if (!io_surface_) { + LOG(ERROR) << "IOSurface lookup failed"; + return false; + } + + return true; +} + +void GLImageIOSurface::Destroy() { +} + +gfx::Size GLImageIOSurface::GetSize() { + return size_; +} + +bool GLImageIOSurface::BindTexImage(unsigned target) { + if (target != GL_TEXTURE_RECTANGLE_ARB) { + // This might be supported in the future. For now, perform strict + // validation so we know what's going on. + LOG(ERROR) << "IOSurface requires TEXTURE_RECTANGLE_ARB target"; + return false; + } + + CGLContextObj cgl_context = static_cast<CGLContextObj>( + GLContext::GetCurrent()->GetHandle()); + + DCHECK(io_surface_); + CGLError cgl_error = io_surface_support_->CGLTexImageIOSurface2D( + cgl_context, + target, + GL_RGBA, + size_.width(), + size_.height(), + GL_BGRA, + GL_UNSIGNED_INT_8_8_8_8_REV, + io_surface_.get(), + 0); + if (cgl_error != kCGLNoError) { + LOG(ERROR) << "Error in CGLTexImageIOSurface2D"; + return false; + } + + return true; +} + +void GLImageIOSurface::ReleaseTexImage(unsigned target) { +} + +void GLImageIOSurface::WillUseTexImage() { +} + +void GLImageIOSurface::DidUseTexImage() { +} + +} // namespace gfx diff --git a/ui/gl/gl_image_io_surface.h b/ui/gl/gl_image_io_surface.h new file mode 100644 index 0000000000..177098282a --- /dev/null +++ b/ui/gl/gl_image_io_surface.h @@ -0,0 +1,42 @@ +// Copyright 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. + +#ifndef UI_GL_GL_IMAGE_IO_SURFACE_H_ +#define UI_GL_GL_IMAGE_IO_SURFACE_H_ + +#include "base/mac/scoped_cftyperef.h" +#include "ui/gl/gl_image.h" + +class IOSurfaceSupport; + +namespace gfx { + +class GL_EXPORT GLImageIOSurface : public GLImage { + public: + explicit GLImageIOSurface(gfx::Size size); + + bool Initialize(gfx::GpuMemoryBufferHandle buffer); + + // Implement GLImage. + virtual void Destroy() OVERRIDE; + virtual gfx::Size GetSize() OVERRIDE; + virtual bool BindTexImage(unsigned target) OVERRIDE; + virtual void ReleaseTexImage(unsigned target) OVERRIDE; + virtual void WillUseTexImage() OVERRIDE; + virtual void DidUseTexImage() OVERRIDE; + + protected: + virtual ~GLImageIOSurface(); + + private: + IOSurfaceSupport* io_surface_support_; + base::ScopedCFTypeRef<CFTypeRef> io_surface_; + gfx::Size size_; + + DISALLOW_COPY_AND_ASSIGN(GLImageIOSurface); +}; + +} // namespace gfx + +#endif // UI_GL_GL_IMAGE_IO_SURFACE_H_ diff --git a/ui/gl/gl_image_mac.cc b/ui/gl/gl_image_mac.cc index 04dc61e870..a48047fb1b 100644 --- a/ui/gl/gl_image_mac.cc +++ b/ui/gl/gl_image_mac.cc @@ -5,6 +5,7 @@ #include "ui/gl/gl_image.h" #include "base/debug/trace_event.h" +#include "ui/gl/gl_image_io_surface.h" #include "ui/gl/gl_image_shm.h" #include "ui/gl/gl_image_stub.h" #include "ui/gl/gl_implementation.h" @@ -44,6 +45,13 @@ scoped_refptr<GLImage> GLImage::CreateGLImageForGpuMemoryBuffer( return image; } + case IO_SURFACE_BUFFER: { + scoped_refptr<GLImageIOSurface> image(new GLImageIOSurface(size)); + if (!image->Initialize(buffer)) + return NULL; + + return image; + } default: NOTREACHED(); return NULL; diff --git a/ui/gl/gl_jni_headers.target.darwin-arm.mk b/ui/gl/gl_jni_headers.target.darwin-arm.mk index 08df60be9b..37b3eb26d6 100644 --- a/ui/gl/gl_jni_headers.target.darwin-arm.mk +++ b/ui/gl/gl_jni_headers.target.darwin-arm.mk @@ -91,6 +91,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -100,9 +101,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -170,6 +173,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -179,9 +183,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gl/gl_jni_headers.target.darwin-mips.mk b/ui/gl/gl_jni_headers.target.darwin-mips.mk index 2ff0d2e505..840261dcc0 100644 --- a/ui/gl/gl_jni_headers.target.darwin-mips.mk +++ b/ui/gl/gl_jni_headers.target.darwin-mips.mk @@ -90,6 +90,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -99,9 +100,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -168,6 +171,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -177,9 +181,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gl/gl_jni_headers.target.darwin-x86.mk b/ui/gl/gl_jni_headers.target.darwin-x86.mk index f6d0dead37..123a185f19 100644 --- a/ui/gl/gl_jni_headers.target.darwin-x86.mk +++ b/ui/gl/gl_jni_headers.target.darwin-x86.mk @@ -93,6 +93,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -102,9 +103,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -175,6 +178,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -184,9 +188,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gl/gl_jni_headers.target.linux-arm.mk b/ui/gl/gl_jni_headers.target.linux-arm.mk index 08df60be9b..37b3eb26d6 100644 --- a/ui/gl/gl_jni_headers.target.linux-arm.mk +++ b/ui/gl/gl_jni_headers.target.linux-arm.mk @@ -91,6 +91,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -100,9 +101,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -170,6 +173,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -179,9 +183,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gl/gl_jni_headers.target.linux-mips.mk b/ui/gl/gl_jni_headers.target.linux-mips.mk index 2ff0d2e505..840261dcc0 100644 --- a/ui/gl/gl_jni_headers.target.linux-mips.mk +++ b/ui/gl/gl_jni_headers.target.linux-mips.mk @@ -90,6 +90,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -99,9 +100,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -168,6 +171,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -177,9 +181,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gl/gl_jni_headers.target.linux-x86.mk b/ui/gl/gl_jni_headers.target.linux-x86.mk index f6d0dead37..123a185f19 100644 --- a/ui/gl/gl_jni_headers.target.linux-x86.mk +++ b/ui/gl/gl_jni_headers.target.linux-x86.mk @@ -93,6 +93,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -102,9 +103,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -175,6 +178,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -184,9 +188,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gl/io_surface_support_mac.cc b/ui/gl/io_surface_support_mac.cc index 077eb817e6..a7aeae85f8 100644 --- a/ui/gl/io_surface_support_mac.cc +++ b/ui/gl/io_surface_support_mac.cc @@ -14,6 +14,15 @@ typedef mach_port_t (*IOSurfaceCreateMachPortProcPtr)(CFTypeRef io_surface); typedef CFTypeRef (*IOSurfaceLookupFromMachPortProcPtr)(mach_port_t port); typedef size_t (*IOSurfaceGetWidthPtr)(CFTypeRef io_surface); typedef size_t (*IOSurfaceGetHeightPtr)(CFTypeRef io_surface); +typedef size_t (*IOSurfaceGetBytesPerRowPtr)(CFTypeRef io_surface); +typedef void* (*IOSurfaceGetBaseAddressPtr)(CFTypeRef io_surface); +typedef IOReturn (*IOSurfaceLockPtr)(CFTypeRef io_surface, + uint32 options, + uint32* seed); +typedef IOReturn (*IOSurfaceUnlockPtr)(CFTypeRef io_surface, + uint32 options, + uint32* seed); + typedef CGLError (*CGLTexImageIOSurface2DProcPtr)(CGLContextObj ctx, GLenum target, GLenum internal_format, @@ -37,6 +46,7 @@ class IOSurfaceSupportImpl : public IOSurfaceSupport { virtual CFStringRef GetKIOSurfaceWidth() OVERRIDE; virtual CFStringRef GetKIOSurfaceHeight() OVERRIDE; virtual CFStringRef GetKIOSurfaceBytesPerElement() OVERRIDE; + virtual CFStringRef GetKIOSurfacePixelFormat() OVERRIDE; virtual CFStringRef GetKIOSurfaceIsGlobal() OVERRIDE; virtual CFTypeRef IOSurfaceCreate(CFDictionaryRef properties) OVERRIDE; @@ -47,6 +57,15 @@ class IOSurfaceSupportImpl : public IOSurfaceSupport { virtual size_t IOSurfaceGetWidth(CFTypeRef io_surface) OVERRIDE; virtual size_t IOSurfaceGetHeight(CFTypeRef io_surface) OVERRIDE; + virtual size_t IOSurfaceGetBytesPerRow(CFTypeRef io_surface) OVERRIDE; + virtual void* IOSurfaceGetBaseAddress(CFTypeRef io_surface) OVERRIDE; + + virtual IOReturn IOSurfaceLock(CFTypeRef io_surface, + uint32 options, + uint32* seed) OVERRIDE; + virtual IOReturn IOSurfaceUnlock(CFTypeRef io_surface, + uint32 options, + uint32* seed) OVERRIDE; virtual CGLError CGLTexImageIOSurface2D(CGLContextObj ctx, GLenum target, @@ -73,6 +92,7 @@ class IOSurfaceSupportImpl : public IOSurfaceSupport { CFStringRef k_io_surface_width_; CFStringRef k_io_surface_height_; CFStringRef k_io_surface_bytes_per_element_; + CFStringRef k_io_surface_pixel_format_; CFStringRef k_io_surface_is_global_; IOSurfaceCreateProcPtr io_surface_create_; IOSurfaceGetIDProcPtr io_surface_get_id_; @@ -81,6 +101,10 @@ class IOSurfaceSupportImpl : public IOSurfaceSupport { IOSurfaceLookupFromMachPortProcPtr io_surface_lookup_from_mach_port_; IOSurfaceGetWidthPtr io_surface_get_width_; IOSurfaceGetHeightPtr io_surface_get_height_; + IOSurfaceGetBytesPerRowPtr io_surface_get_bytes_per_row_; + IOSurfaceGetBaseAddressPtr io_surface_get_base_address_; + IOSurfaceLockPtr io_surface_lock_; + IOSurfaceUnlockPtr io_surface_unlock_; CGLTexImageIOSurface2DProcPtr cgl_tex_image_io_surface_2d_; CVPixelBufferGetIOSurfaceProcPtr cv_pixel_buffer_get_io_surface_; bool initialized_successfully_; @@ -108,6 +132,10 @@ CFStringRef IOSurfaceSupportImpl::GetKIOSurfaceBytesPerElement() { return k_io_surface_bytes_per_element_; } +CFStringRef IOSurfaceSupportImpl::GetKIOSurfacePixelFormat() { + return k_io_surface_pixel_format_; +} + CFStringRef IOSurfaceSupportImpl::GetKIOSurfaceIsGlobal() { return k_io_surface_is_global_; } @@ -142,6 +170,25 @@ size_t IOSurfaceSupportImpl::IOSurfaceGetHeight(CFTypeRef io_surface) { return io_surface_get_height_(io_surface); } +size_t IOSurfaceSupportImpl::IOSurfaceGetBytesPerRow(CFTypeRef io_surface) { + return io_surface_get_bytes_per_row_(io_surface); +} + +void* IOSurfaceSupportImpl::IOSurfaceGetBaseAddress(CFTypeRef io_surface) { + return io_surface_get_base_address_(io_surface); +} + +IOReturn IOSurfaceSupportImpl::IOSurfaceLock(CFTypeRef io_surface, + uint32 options, + uint32* seed) { + return io_surface_lock_(io_surface, options, seed); +} + +IOReturn IOSurfaceSupportImpl::IOSurfaceUnlock(CFTypeRef io_surface, + uint32 options, + uint32* seed) { + return io_surface_unlock_(io_surface, options, seed); +} CGLError IOSurfaceSupportImpl::CGLTexImageIOSurface2D(CGLContextObj ctx, GLenum target, @@ -175,6 +222,7 @@ IOSurfaceSupportImpl::IOSurfaceSupportImpl() k_io_surface_width_(NULL), k_io_surface_height_(NULL), k_io_surface_bytes_per_element_(NULL), + k_io_surface_pixel_format_(NULL), k_io_surface_is_global_(NULL), io_surface_create_(NULL), io_surface_get_id_(NULL), @@ -183,6 +231,10 @@ IOSurfaceSupportImpl::IOSurfaceSupportImpl() io_surface_lookup_from_mach_port_(NULL), io_surface_get_width_(NULL), io_surface_get_height_(NULL), + io_surface_get_bytes_per_row_(NULL), + io_surface_get_base_address_(NULL), + io_surface_lock_(NULL), + io_surface_unlock_(NULL), cgl_tex_image_io_surface_2d_(NULL), cv_pixel_buffer_get_io_surface_(NULL), initialized_successfully_(false) { @@ -206,6 +258,8 @@ IOSurfaceSupportImpl::IOSurfaceSupportImpl() void* surface_height_ptr = dlsym(iosurface_handle_, "kIOSurfaceHeight"); void* surface_bytes_per_element_ptr = dlsym(iosurface_handle_, "kIOSurfaceBytesPerElement"); + void* surface_pixel_format_ptr = + dlsym(iosurface_handle_, "kIOSurfacePixelFormat"); void* surface_is_global_ptr = dlsym(iosurface_handle_, "kIOSurfaceIsGlobal"); void* surface_create_ptr = dlsym(iosurface_handle_, "IOSurfaceCreate"); @@ -219,6 +273,12 @@ IOSurfaceSupportImpl::IOSurfaceSupportImpl() dlsym(iosurface_handle_, "IOSurfaceGetWidth"); void* io_surface_get_height_ptr = dlsym(iosurface_handle_, "IOSurfaceGetHeight"); + void* io_surface_get_bytes_per_row_ptr = + dlsym(iosurface_handle_, "IOSurfaceGetBytesPerRow"); + void* io_surface_get_base_address_ptr = + dlsym(iosurface_handle_, "IOSurfaceGetBaseAddress"); + void* io_surface_lock_ptr = dlsym(iosurface_handle_, "IOSurfaceLock"); + void* io_surface_unlock_ptr = dlsym(iosurface_handle_, "IOSurfaceUnlock"); void* tex_image_io_surface_2d_ptr = dlsym(opengl_handle_, "CGLTexImageIOSurface2D"); void* cv_pixel_buffer_get_io_surface = @@ -226,6 +286,7 @@ IOSurfaceSupportImpl::IOSurfaceSupportImpl() if (!surface_width_ptr || !surface_height_ptr || !surface_bytes_per_element_ptr || + !surface_pixel_format_ptr || !surface_is_global_ptr || !surface_create_ptr || !surface_get_id_ptr || @@ -234,6 +295,10 @@ IOSurfaceSupportImpl::IOSurfaceSupportImpl() !surface_lookup_from_mach_port_ptr || !io_surface_get_width_ptr || !io_surface_get_height_ptr || + !io_surface_get_bytes_per_row_ptr || + !io_surface_get_base_address_ptr || + !io_surface_lock_ptr || + !io_surface_unlock_ptr || !tex_image_io_surface_2d_ptr || !cv_pixel_buffer_get_io_surface) { CloseLibraryHandles(); @@ -244,6 +309,8 @@ IOSurfaceSupportImpl::IOSurfaceSupportImpl() k_io_surface_height_ = *static_cast<CFStringRef*>(surface_height_ptr); k_io_surface_bytes_per_element_ = *static_cast<CFStringRef*>(surface_bytes_per_element_ptr); + k_io_surface_pixel_format_ = + *static_cast<CFStringRef*>(surface_pixel_format_ptr); k_io_surface_is_global_ = *static_cast<CFStringRef*>(surface_is_global_ptr); io_surface_create_ = reinterpret_cast<IOSurfaceCreateProcPtr>( surface_create_ptr); @@ -263,6 +330,15 @@ IOSurfaceSupportImpl::IOSurfaceSupportImpl() io_surface_get_height_ = reinterpret_cast<IOSurfaceGetHeightPtr>( io_surface_get_height_ptr); + io_surface_get_bytes_per_row_ = + reinterpret_cast<IOSurfaceGetBytesPerRowPtr>( + io_surface_get_bytes_per_row_ptr); + io_surface_get_base_address_ = + reinterpret_cast<IOSurfaceGetBaseAddressPtr>( + io_surface_get_base_address_ptr); + io_surface_lock_ = reinterpret_cast<IOSurfaceLockPtr>(io_surface_lock_ptr); + io_surface_unlock_ = reinterpret_cast<IOSurfaceUnlockPtr>( + io_surface_unlock_ptr); cgl_tex_image_io_surface_2d_ = reinterpret_cast<CGLTexImageIOSurface2DProcPtr>( tex_image_io_surface_2d_ptr); diff --git a/ui/gl/io_surface_support_mac.h b/ui/gl/io_surface_support_mac.h index d8c30e1f1b..d8699c833a 100644 --- a/ui/gl/io_surface_support_mac.h +++ b/ui/gl/io_surface_support_mac.h @@ -31,6 +31,7 @@ class GL_EXPORT IOSurfaceSupport { virtual CFStringRef GetKIOSurfaceWidth() = 0; virtual CFStringRef GetKIOSurfaceHeight() = 0; virtual CFStringRef GetKIOSurfaceBytesPerElement() = 0; + virtual CFStringRef GetKIOSurfacePixelFormat() = 0; virtual CFStringRef GetKIOSurfaceIsGlobal() = 0; virtual CFTypeRef IOSurfaceCreate(CFDictionaryRef properties) = 0; @@ -49,6 +50,15 @@ class GL_EXPORT IOSurfaceSupport { virtual size_t IOSurfaceGetWidth(CFTypeRef io_surface) = 0; virtual size_t IOSurfaceGetHeight(CFTypeRef io_surface) = 0; + virtual size_t IOSurfaceGetBytesPerRow(CFTypeRef io_surface) = 0; + virtual void* IOSurfaceGetBaseAddress(CFTypeRef io_surface) = 0; + + virtual IOReturn IOSurfaceLock(CFTypeRef io_surface, + uint32 options, + uint32* seed) = 0; + virtual IOReturn IOSurfaceUnlock(CFTypeRef io_surface, + uint32 options, + uint32* seed) = 0; virtual CGLError CGLTexImageIOSurface2D(CGLContextObj ctx, GLenum target, diff --git a/ui/gl/surface_jni_headers.target.darwin-arm.mk b/ui/gl/surface_jni_headers.target.darwin-arm.mk index b8f9dfaa50..d035c1ede1 100644 --- a/ui/gl/surface_jni_headers.target.darwin-arm.mk +++ b/ui/gl/surface_jni_headers.target.darwin-arm.mk @@ -73,6 +73,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -82,9 +83,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -152,6 +155,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -161,9 +165,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gl/surface_jni_headers.target.darwin-mips.mk b/ui/gl/surface_jni_headers.target.darwin-mips.mk index 5e5c0e2d30..61c8bece2b 100644 --- a/ui/gl/surface_jni_headers.target.darwin-mips.mk +++ b/ui/gl/surface_jni_headers.target.darwin-mips.mk @@ -72,6 +72,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -81,9 +82,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -150,6 +153,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -159,9 +163,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gl/surface_jni_headers.target.darwin-x86.mk b/ui/gl/surface_jni_headers.target.darwin-x86.mk index 408a501aa2..5fa1b1e5ec 100644 --- a/ui/gl/surface_jni_headers.target.darwin-x86.mk +++ b/ui/gl/surface_jni_headers.target.darwin-x86.mk @@ -75,6 +75,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -84,9 +85,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -157,6 +160,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -166,9 +170,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gl/surface_jni_headers.target.linux-arm.mk b/ui/gl/surface_jni_headers.target.linux-arm.mk index b8f9dfaa50..d035c1ede1 100644 --- a/ui/gl/surface_jni_headers.target.linux-arm.mk +++ b/ui/gl/surface_jni_headers.target.linux-arm.mk @@ -73,6 +73,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -82,9 +83,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -152,6 +155,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -161,9 +165,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gl/surface_jni_headers.target.linux-mips.mk b/ui/gl/surface_jni_headers.target.linux-mips.mk index 5e5c0e2d30..61c8bece2b 100644 --- a/ui/gl/surface_jni_headers.target.linux-mips.mk +++ b/ui/gl/surface_jni_headers.target.linux-mips.mk @@ -72,6 +72,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -81,9 +82,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -150,6 +153,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -159,9 +163,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/gl/surface_jni_headers.target.linux-x86.mk b/ui/gl/surface_jni_headers.target.linux-x86.mk index 408a501aa2..5fa1b1e5ec 100644 --- a/ui/gl/surface_jni_headers.target.linux-x86.mk +++ b/ui/gl/surface_jni_headers.target.linux-x86.mk @@ -75,6 +75,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -84,9 +85,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -157,6 +160,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -166,9 +170,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/keyboard/keyboard.gyp b/ui/keyboard/keyboard.gyp index 7953ef974c..4ea3b09808 100644 --- a/ui/keyboard/keyboard.gyp +++ b/ui/keyboard/keyboard.gyp @@ -82,6 +82,7 @@ '../../content/content.gyp:content', '../../skia/skia.gyp:skia', '../../testing/gtest.gyp:gtest', + '../../url/url.gyp:url_lib', '../aura/aura.gyp:aura', '../aura/aura.gyp:aura_test_support', '../compositor/compositor.gyp:compositor', diff --git a/ui/keyboard/keyboard_controller.cc b/ui/keyboard/keyboard_controller.cc index 537cf12b9f..0cb975f7d9 100644 --- a/ui/keyboard/keyboard_controller.cc +++ b/ui/keyboard/keyboard_controller.cc @@ -182,6 +182,10 @@ void KeyboardController::OnWindowHierarchyChanged( OnTextInputStateChanged(proxy_->GetInputMethod()->GetTextInputClient()); } +void KeyboardController::SetOverrideContentUrl(const GURL& url) { + proxy_->SetOverrideContentUrl(url); +} + void KeyboardController::OnTextInputStateChanged( const ui::TextInputClient* client) { if (!container_.get()) diff --git a/ui/keyboard/keyboard_controller.h b/ui/keyboard/keyboard_controller.h index 1daa296a1c..45bba329be 100644 --- a/ui/keyboard/keyboard_controller.h +++ b/ui/keyboard/keyboard_controller.h @@ -12,6 +12,7 @@ #include "ui/aura/window_observer.h" #include "ui/base/ime/input_method_observer.h" #include "ui/keyboard/keyboard_export.h" +#include "url/gurl.h" namespace aura { class Window; @@ -51,6 +52,10 @@ class KEYBOARD_EXPORT KeyboardController : public ui::InputMethodObserver, // KeyboardController. aura::Window* GetContainerWindow(); + // Sets the override content url. This is used by for input view for extension + // IMEs. + void SetOverrideContentUrl(const GURL& url); + // Hides virtual keyboard and notifies observer bounds change. // This function should be called with a delay to avoid layout flicker // when the focus of input field quickly change. |automatic| is true when the diff --git a/ui/keyboard/keyboard_controller_proxy.cc b/ui/keyboard/keyboard_controller_proxy.cc index 1cfb99d92b..2d1bb4b537 100644 --- a/ui/keyboard/keyboard_controller_proxy.cc +++ b/ui/keyboard/keyboard_controller_proxy.cc @@ -93,28 +93,46 @@ class KeyboardContentsDelegate : public content::WebContentsDelegate, namespace keyboard { -KeyboardControllerProxy::KeyboardControllerProxy() { +KeyboardControllerProxy::KeyboardControllerProxy() + : default_url_(kKeyboardWebUIURL) { } KeyboardControllerProxy::~KeyboardControllerProxy() { } +const GURL& KeyboardControllerProxy::GetValidUrl() { + return override_url_.is_valid() ? override_url_ : default_url_; +} + +void KeyboardControllerProxy::SetOverrideContentUrl(const GURL& url) { + if (override_url_ == url) + return; + override_url_ = url; + + ReloadContents(); +} + +void KeyboardControllerProxy::ReloadContents() { + if (keyboard_contents_) { + content::OpenURLParams params( + GetValidUrl(), + content::Referrer(), + SINGLETON_TAB, + content::PAGE_TRANSITION_AUTO_TOPLEVEL, + false); + keyboard_contents_->OpenURL(params); + } +} + aura::Window* KeyboardControllerProxy::GetKeyboardWindow() { if (!keyboard_contents_) { content::BrowserContext* context = GetBrowserContext(); - GURL url(kKeyboardWebUIURL); keyboard_contents_.reset(content::WebContents::Create( content::WebContents::CreateParams(context, - content::SiteInstance::CreateForURL(context, url)))); + content::SiteInstance::CreateForURL(context, GetValidUrl())))); keyboard_contents_->SetDelegate(new KeyboardContentsDelegate(this)); SetupWebContents(keyboard_contents_.get()); - - content::OpenURLParams params(url, - content::Referrer(), - SINGLETON_TAB, - content::PAGE_TRANSITION_AUTO_TOPLEVEL, - false); - keyboard_contents_->OpenURL(params); + ReloadContents(); } return keyboard_contents_->GetView()->GetNativeView(); diff --git a/ui/keyboard/keyboard_controller_proxy.h b/ui/keyboard/keyboard_controller_proxy.h index 5358597799..cdd870a6a7 100644 --- a/ui/keyboard/keyboard_controller_proxy.h +++ b/ui/keyboard/keyboard_controller_proxy.h @@ -38,6 +38,9 @@ class KEYBOARD_EXPORT KeyboardControllerProxy { // with the proxy. virtual aura::Window* GetKeyboardWindow(); + // Sets the override content url. + void SetOverrideContentUrl(const GURL& url); + // Gets the InputMethod that will provide notifications about changes in the // text input context. virtual ui::InputMethod* GetInputMethod() = 0; @@ -74,6 +77,15 @@ class KEYBOARD_EXPORT KeyboardControllerProxy { virtual void SetupWebContents(content::WebContents* contents); private: + // Reloads the web contents to the valid url from GetValidUrl(). + void ReloadContents(); + + // Gets the valid url from default url or override url. + const GURL& GetValidUrl(); + + const GURL default_url_; + GURL override_url_; + scoped_ptr<content::WebContents> keyboard_contents_; DISALLOW_COPY_AND_ASSIGN(KeyboardControllerProxy); diff --git a/ui/keyboard/keyboard_resources.grd b/ui/keyboard/keyboard_resources.grd index 00433a5247..1fbf9684ff 100644 --- a/ui/keyboard/keyboard_resources.grd +++ b/ui/keyboard/keyboard_resources.grd @@ -63,7 +63,7 @@ <include name="IDR_KEYBOARD_MAIN_JS" file="resources/main.js" type="BINDATA" /> <include name="IDR_KEYBOARD_MANIFEST" file="resources/manifest.json" type="BINDATA" /> <include name="IDR_KEYBOARD_MAIN_CSS" file="resources/main.css" type="BINDATA" /> - <include name="IDR_KEYBOARD_POLYMER" file="resources/polymer.min.js" flattenhtml="true" type="BINDATA" /> + <include name="IDR_KEYBOARD_POLYMER_LOADER" file="resources/polymer_loader.js" flattenhtml="true" type="BINDATA" /> <include name="IDR_KEYBOARD_SPACEBAR_ROW" file="resources/layouts/spacebar-row.html" type="BINDATA" /> <include name="IDR_KEYBOARD_VOICE_INPUT_JS" file="resources/voice_input.js" type="BINDATA" /> <include name="IDR_KEYBOARD_WEBUI_INDEX" file="resources/webui_index.html" allowexternalscript="true" type="BINDATA" /> diff --git a/ui/keyboard/keyboard_ui_controller.cc b/ui/keyboard/keyboard_ui_controller.cc index 4967fac869..1c37cdf35a 100644 --- a/ui/keyboard/keyboard_ui_controller.cc +++ b/ui/keyboard/keyboard_ui_controller.cc @@ -85,7 +85,7 @@ content::WebUIDataSource* CreateKeyboardUIDataSource() { source->AddResourcePath("layouts/system-qwerty.html", IDR_KEYBOARD_LAYOUTS_SYSTEM_QWERTY); source->AddResourcePath("main.js", IDR_KEYBOARD_MAIN_JS); - source->AddResourcePath("polymer.min.js", IDR_KEYBOARD_POLYMER); + source->AddResourcePath("polymer_loader.js", IDR_KEYBOARD_POLYMER_LOADER); source->AddResourcePath("voice_input.js", IDR_KEYBOARD_VOICE_INPUT_JS); // These files are specific to the WebUI version diff --git a/ui/keyboard/keyboard_ui_handler.cc b/ui/keyboard/keyboard_ui_handler.cc index 610d0e2500..780e0be4aa 100644 --- a/ui/keyboard/keyboard_ui_handler.cc +++ b/ui/keyboard/keyboard_ui_handler.cc @@ -102,12 +102,14 @@ void KeyboardUIHandler::HandleSendKeyEventMessage( std::string type; int char_value; int key_code; + std::string key_name; int modifiers; if (!args->GetDictionary(0, ¶ms) || !params->GetString("type", &type) || !params->GetInteger("charValue", &char_value) || !params->GetInteger("keyCode", &key_code) || + !params->GetString("keyName", &key_name) || !params->GetInteger("modifiers", &modifiers)) { LOG(ERROR) << "SendKeyEvent failed: bad argument"; return; @@ -123,6 +125,7 @@ void KeyboardUIHandler::HandleSendKeyEventMessage( if (!keyboard::SendKeyEvent(type, char_value, key_code, + key_name, modifiers, dispatcher)) { LOG(ERROR) << "sendKeyEvent failed"; diff --git a/ui/keyboard/keyboard_util.cc b/ui/keyboard/keyboard_util.cc index 42c26a0a35..bdb049df32 100644 --- a/ui/keyboard/keyboard_util.cc +++ b/ui/keyboard/keyboard_util.cc @@ -110,6 +110,7 @@ bool MoveCursor(int swipe_direction, bool SendKeyEvent(const std::string type, int key_value, int key_code, + std::string key_name, int modifiers, aura::WindowEventDispatcher* dispatcher) { ui::EventType event_type = ui::ET_UNKNOWN; @@ -153,7 +154,7 @@ bool SendKeyEvent(const std::string type, } } - ui::KeyEvent event(event_type, code, modifiers, false); + ui::KeyEvent event(event_type, code, key_name, modifiers, false); dispatcher->AsRootWindowHostDelegate()->OnHostKeyEvent(&event); } return true; @@ -241,7 +242,7 @@ const GritResourceMap* GetKeyboardExtensionResources(size_t* size) { {"keyboard/main.js", IDR_KEYBOARD_MAIN_JS}, {"keyboard/manifest.json", IDR_KEYBOARD_MANIFEST}, {"keyboard/main.css", IDR_KEYBOARD_MAIN_CSS}, - {"keyboard/polymer.min.js", IDR_KEYBOARD_POLYMER}, + {"keyboard/polymer_loader.js", IDR_KEYBOARD_POLYMER_LOADER}, {"keyboard/voice_input.js", IDR_KEYBOARD_VOICE_INPUT_JS}, }; static const size_t kKeyboardResourcesSize = arraysize(kKeyboardResources); diff --git a/ui/keyboard/keyboard_util.h b/ui/keyboard/keyboard_util.h index b5dcefd1e8..232127320b 100644 --- a/ui/keyboard/keyboard_util.h +++ b/ui/keyboard/keyboard_util.h @@ -53,12 +53,14 @@ KEYBOARD_EXPORT bool MoveCursor(int swipe_direction, // Sends a fabricated key event, where |type| is the event type, |key_value| // is the unicode value of the character, |key_code| is the legacy key code -// value, and |modifier| indicates if any modifier keys are being virtually -// pressed. The event is dispatched to the active TextInputClient associated -// with |root_window|. The type may be "keydown" or "keyup". +// value, |key_name| is the name of the key as defined in the DOM3 key event +// specification, and |modifier| indicates if any modifier keys are being +// virtually pressed. The event is dispatched to the active TextInputClient +// associated with |root_window|. The type may be "keydown" or "keyup". KEYBOARD_EXPORT bool SendKeyEvent(std::string type, int key_value, int key_code, + std::string key_name, int modifiers, aura::WindowEventDispatcher* dispatcher); diff --git a/ui/keyboard/resources/api_adapter.js b/ui/keyboard/resources/api_adapter.js index 1be04e64ae..934a760046 100644 --- a/ui/keyboard/resources/api_adapter.js +++ b/ui/keyboard/resources/api_adapter.js @@ -2,6 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +/** + * Queries the document for an element with a matching id. + * @param {string} id is a case-sensitive string representing the unique ID of + * the element being sought. + * @return {?Element} The element with that id. + */ +var $ = function(id) { + return document.getElementById(id); +} + function logIfError() { if (chrome.runtime.lastError) { console.log(chrome.runtime.lastError); @@ -30,6 +40,6 @@ function keyboardLoaded() { chrome.virtualKeyboardPrivate.onTextInputBoxFocused.addListener( function (inputContext) { - keyboard.inputTypeValue = inputContext.type; + $('keyboard').inputTypeValue = inputContext.type; } ); diff --git a/ui/keyboard/resources/elements/kb-altkey.html b/ui/keyboard/resources/elements/kb-altkey.html index 7df0bf66e8..276ca5c119 100644 --- a/ui/keyboard/resources/elements/kb-altkey.html +++ b/ui/keyboard/resources/elements/kb-altkey.html @@ -58,7 +58,7 @@ * inside a node, the event should be filter out. * @param {Node} node The accent key node which receives event. * @param {event} event A pointer move event. - * @return {boolean} True if event is externla to node. + * @return {boolean} True if event is external to node. */ function isRelevantEvent(node, event) { return !(node.compareDocumentPosition(event.relatedTarget) @@ -72,19 +72,32 @@ this.fire('key-down', {}); } }, + out: function(event) { if (isRelevantEvent(this, event)) { this.classList.remove('active'); } }, + up: function(event) { var detail = { - char: this.char || this.textContent + char: this.charValue }; this.fire('key-up', detail); }, + // TODO(bshe): kb-altkey should extend from kb-key-base. autoRelease: function() { + }, + + /** + * Character value associated with the key. Typically, the value is a + * single character, but may be multi-character in cases like a ".com" + * button. + * @return {string} + */ + get charValue() { + return this.char || this.textContent; } }); </script> diff --git a/ui/keyboard/resources/elements/kb-key-codes.html b/ui/keyboard/resources/elements/kb-key-codes.html index 4efd1ecc3a..d99a00fcf7 100644 --- a/ui/keyboard/resources/elements/kb-key-codes.html +++ b/ui/keyboard/resources/elements/kb-key-codes.html @@ -35,121 +35,127 @@ // TODO(rsadam): Correctly propagate shutdown keycode. This is currently // ignored due to chromoting (crbug/146609) var keyCodes = { - '\b': {keyCode: 0x08, shiftModifier: false}, - '\t': {keyCode: 0x09, shiftModifier: false}, - '\n': {keyCode: 0x0D, shiftModifier: false}, - 'Esc': {keyCode: 0x1B, shiftModifier: false}, - ' ': {keyCode: 0x20, shiftModifier: false}, - 'Arrow-Left': {keyCode: 0x25, shiftModifier: undefined}, - 'Arrow-Up': {keyCode: 0x26, shiftModifier: undefined}, - 'Arrow-Right': {keyCode: 0x27, shiftModifier: undefined}, - 'Arrow-Down': {keyCode: 0x28, shiftModifier: undefined}, - '0': {keyCode: 0x30, shiftModifier: false}, - ')': {keyCode: 0x30, shiftModifier: true}, - '1': {keyCode: 0x31, shiftModifier: false}, - '!': {keyCode: 0x31, shiftModifier: true}, - '2': {keyCode: 0x32, shiftModifier: false}, - '@': {keyCode: 0x32, shiftModifier: true}, - '3': {keyCode: 0x33, shiftModifier: false}, - '#': {keyCode: 0x33, shiftModifier: true}, - '4': {keyCode: 0x34, shiftModifier: false}, - '$': {keyCode: 0x34, shiftModifier: true}, - '5': {keyCode: 0x35, shiftModifier: false}, - '%': {keyCode: 0x35, shiftModifier: true}, - '6': {keyCode: 0x36, shiftModifier: false}, - '^': {keyCode: 0x36, shiftModifier: true}, - '7': {keyCode: 0x37, shiftModifier: false}, - '&': {keyCode: 0x37, shiftModifier: true}, - '8': {keyCode: 0x38, shiftModifier: false}, - '*': {keyCode: 0x38, shiftModifier: true}, - '9': {keyCode: 0x39, shiftModifier: false}, - '(': {keyCode: 0x39, shiftModifier: true}, - 'a': {keyCode: 0x41, shiftModifier: false}, - 'A': {keyCode: 0x41, shiftModifier: true}, - 'b': {keyCode: 0x42, shiftModifier: false}, - 'B': {keyCode: 0x42, shiftModifier: true}, - 'c': {keyCode: 0x43, shiftModifier: false}, - 'C': {keyCode: 0x43, shiftModifier: true}, - 'd': {keyCode: 0x44, shiftModifier: false}, - 'D': {keyCode: 0x44, shiftModifier: true}, - 'e': {keyCode: 0x45, shiftModifier: false}, - 'E': {keyCode: 0x45, shiftModifier: true}, - 'f': {keyCode: 0x46, shiftModifier: false}, - 'F': {keyCode: 0x46, shiftModifier: true}, - 'g': {keyCode: 0x47, shiftModifier: false}, - 'G': {keyCode: 0x47, shiftModifier: true}, - 'h': {keyCode: 0x48, shiftModifier: false}, - 'H': {keyCode: 0x48, shiftModifier: true}, - 'i': {keyCode: 0x49, shiftModifier: false}, - 'I': {keyCode: 0x49, shiftModifier: true}, - 'j': {keyCode: 0x4A, shiftModifier: false}, - 'J': {keyCode: 0x4A, shiftModifier: true}, - 'k': {keyCode: 0x4B, shiftModifier: false}, - 'K': {keyCode: 0x4B, shiftModifier: true}, - 'l': {keyCode: 0x4C, shiftModifier: false}, - 'L': {keyCode: 0x4C, shiftModifier: true}, - 'm': {keyCode: 0x4D, shiftModifier: false}, - 'M': {keyCode: 0x4D, shiftModifier: true}, - 'n': {keyCode: 0x4E, shiftModifier: false}, - 'N': {keyCode: 0x4E, shiftModifier: true}, - 'o': {keyCode: 0x4F, shiftModifier: false}, - 'O': {keyCode: 0x4F, shiftModifier: true}, - 'p': {keyCode: 0x50, shiftModifier: false}, - 'P': {keyCode: 0x50, shiftModifier: true}, - 'q': {keyCode: 0x51, shiftModifier: false}, - 'Q': {keyCode: 0x51, shiftModifier: true}, - 'r': {keyCode: 0x52, shiftModifier: false}, - 'R': {keyCode: 0x52, shiftModifier: true}, - 's': {keyCode: 0x53, shiftModifier: false}, - 'S': {keyCode: 0x53, shiftModifier: true}, - 't': {keyCode: 0x54, shiftModifier: false}, - 'T': {keyCode: 0x54, shiftModifier: true}, - 'u': {keyCode: 0x55, shiftModifier: false}, - 'U': {keyCode: 0x55, shiftModifier: true}, - 'v': {keyCode: 0x56, shiftModifier: false}, - 'V': {keyCode: 0x56, shiftModifier: true}, - 'w': {keyCode: 0x57, shiftModifier: false}, - 'W': {keyCode: 0x57, shiftModifier: true}, - 'x': {keyCode: 0x58, shiftModifier: false}, - 'X': {keyCode: 0x58, shiftModifier: true}, - 'y': {keyCode: 0x59, shiftModifier: false}, - 'Y': {keyCode: 0x59, shiftModifier: true}, - 'z': {keyCode: 0x5A, shiftModifier: false}, - 'Z': {keyCode: 0x5A, shiftModifier: true}, + '\b': {keyCode: 0x08, keyName: 'Backspace', shiftModifier: false}, + '\t': {keyCode: 0x09, keyName: 'Tab', shiftModifier: false}, + '\n': {keyCode: 0x0D, keyName: 'Enter', shiftModifier: false}, + 'Esc': {keyCode: 0x1B, keyName: 'Escape', shiftModifier: false}, + ' ': {keyCode: 0x20, keyName: 'Space', shiftModifier: false}, + 'Arrow-Left': {keyCode: 0x25, keyName: 'ArrowLeft', + shiftModifier: undefined}, + 'Arrow-Up': {keyCode: 0x26, keyName: 'ArrowUp', shiftModifier: undefined}, + 'Arrow-Right': {keyCode: 0x27, keyName: 'ArrowRight', + shiftModifier: undefined}, + 'Arrow-Down': {keyCode: 0x28, keyName: 'ArrowDown', + shiftModifier: undefined}, + '0': {keyCode: 0x30, keyName: 'Digit0', shiftModifier: false}, + ')': {keyCode: 0x30, keyName: 'Digit0', shiftModifier: true}, + '1': {keyCode: 0x31, keyName: 'Digit1', shiftModifier: false}, + '!': {keyCode: 0x31, keyName: 'Digit1', shiftModifier: true}, + '2': {keyCode: 0x32, keyName: 'Digit2', shiftModifier: false}, + '@': {keyCode: 0x32, keyName: 'Digit2', shiftModifier: true}, + '3': {keyCode: 0x33, keyName: 'Digit3', shiftModifier: false}, + '#': {keyCode: 0x33, keyName: 'Digit3', shiftModifier: true}, + '4': {keyCode: 0x34, keyName: 'Digit4', shiftModifier: false}, + '$': {keyCode: 0x34, keyName: 'Digit4', shiftModifier: true}, + '5': {keyCode: 0x35, keyName: 'Digit5', shiftModifier: false}, + '%': {keyCode: 0x35, keyName: 'Digit5', shiftModifier: true}, + '6': {keyCode: 0x36, keyName: 'Digit6', shiftModifier: false}, + '^': {keyCode: 0x36, keyName: 'Digit6', shiftModifier: true}, + '7': {keyCode: 0x37, keyName: 'Digit7', shiftModifier: false}, + '&': {keyCode: 0x37, keyName: 'Digit7', shiftModifier: true}, + '8': {keyCode: 0x38, keyName: 'Digit8', shiftModifier: false}, + '*': {keyCode: 0x38, keyName: 'Digit8', shiftModifier: true}, + '9': {keyCode: 0x39, keyName: 'Digit9', shiftModifier: false}, + '(': {keyCode: 0x39, keyName: 'Digit9', shiftModifier: true}, + 'a': {keyCode: 0x41, keyName: 'KeyA', shiftModifier: false}, + 'A': {keyCode: 0x41, keyName: 'KeyA', shiftModifier: true}, + 'b': {keyCode: 0x42, keyName: 'KeyB', shiftModifier: false}, + 'B': {keyCode: 0x42, keyName: 'KeyB', shiftModifier: true}, + 'c': {keyCode: 0x43, keyName: 'KeyC', shiftModifier: false}, + 'C': {keyCode: 0x43, keyName: 'KeyC', shiftModifier: true}, + 'd': {keyCode: 0x44, keyName: 'KeyD', shiftModifier: false}, + 'D': {keyCode: 0x44, keyName: 'KeyD', shiftModifier: true}, + 'e': {keyCode: 0x45, keyName: 'KeyE', shiftModifier: false}, + 'E': {keyCode: 0x45, keyName: 'KeyE', shiftModifier: true}, + 'f': {keyCode: 0x46, keyName: 'KeyF', shiftModifier: false}, + 'F': {keyCode: 0x46, keyName: 'KeyF', shiftModifier: true}, + 'g': {keyCode: 0x47, keyName: 'KeyG', shiftModifier: false}, + 'G': {keyCode: 0x47, keyName: 'KeyG', shiftModifier: true}, + 'h': {keyCode: 0x48, keyName: 'KeyH', shiftModifier: false}, + 'H': {keyCode: 0x48, keyName: 'KeyH', shiftModifier: true}, + 'i': {keyCode: 0x49, keyName: 'KeyI', shiftModifier: false}, + 'I': {keyCode: 0x49, keyName: 'KeyI', shiftModifier: true}, + 'j': {keyCode: 0x4A, keyName: 'KeyJ', shiftModifier: false}, + 'J': {keyCode: 0x4A, keyName: 'KeyJ', shiftModifier: true}, + 'k': {keyCode: 0x4B, keyName: 'KeyK', shiftModifier: false}, + 'K': {keyCode: 0x4B, keyName: 'KeyK', shiftModifier: true}, + 'l': {keyCode: 0x4C, keyName: 'KeyL', shiftModifier: false}, + 'L': {keyCode: 0x4C, keyName: 'KeyL', shiftModifier: true}, + 'm': {keyCode: 0x4D, keyName: 'KeyM', shiftModifier: false}, + 'M': {keyCode: 0x4D, keyName: 'KeyM', shiftModifier: true}, + 'n': {keyCode: 0x4E, keyName: 'KeyN', shiftModifier: false}, + 'N': {keyCode: 0x4E, keyName: 'KeyN', shiftModifier: true}, + 'o': {keyCode: 0x4F, keyName: 'KeyO', shiftModifier: false}, + 'O': {keyCode: 0x4F, keyName: 'KeyO', shiftModifier: true}, + 'p': {keyCode: 0x50, keyName: 'KeyP', shiftModifier: false}, + 'P': {keyCode: 0x50, keyName: 'KeyP', shiftModifier: true}, + 'q': {keyCode: 0x51, keyName: 'KeyQ', shiftModifier: false}, + 'Q': {keyCode: 0x51, keyName: 'KeyQ', shiftModifier: true}, + 'r': {keyCode: 0x52, keyName: 'KeyR', shiftModifier: false}, + 'R': {keyCode: 0x52, keyName: 'KeyR', shiftModifier: true}, + 's': {keyCode: 0x53, keyName: 'KeyS', shiftModifier: false}, + 'S': {keyCode: 0x53, keyName: 'KeyS', shiftModifier: true}, + 't': {keyCode: 0x54, keyName: 'KeyT', shiftModifier: false}, + 'T': {keyCode: 0x54, keyName: 'KeyT', shiftModifier: true}, + 'u': {keyCode: 0x55, keyName: 'KeyU', shiftModifier: false}, + 'U': {keyCode: 0x55, keyName: 'KeyU', shiftModifier: true}, + 'v': {keyCode: 0x56, keyName: 'KeyV', shiftModifier: false}, + 'V': {keyCode: 0x56, keyName: 'KeyV', shiftModifier: true}, + 'w': {keyCode: 0x57, keyName: 'KeyW', shiftModifier: false}, + 'W': {keyCode: 0x57, keyName: 'KeyW', shiftModifier: true}, + 'x': {keyCode: 0x58, keyName: 'KeyX', shiftModifier: false}, + 'X': {keyCode: 0x58, keyName: 'KeyX', shiftModifier: true}, + 'y': {keyCode: 0x59, keyName: 'KeyY', shiftModifier: false}, + 'Y': {keyCode: 0x59, keyName: 'KeyY', shiftModifier: true}, + 'z': {keyCode: 0x5A, keyName: 'KeyZ', shiftModifier: false}, + 'Z': {keyCode: 0x5A, keyName: 'KeyZ', shiftModifier: true}, 'Fullscreen': {keyCode: 0x7A, shiftModifier: false}, 'Shutdown': {keyCode: 0x98, shiftModifier: false}, 'Back': {keyCode: 0xA6, shiftModifier: false}, 'Forward': {keyCode: 0xA7, shiftModifier: false}, 'Reload': {keyCode: 0xA8, shiftModifier: false}, 'Search': {keyCode: 0xAA, shiftModifier: false}, - 'Mute': {keyCode: 0xAD, shiftModifier: false}, - 'Volume-Down': {keyCode: 0xAE, shiftModifier: false}, - 'Volume-Up': {keyCode: 0xAF, shiftModifier: false}, + 'Mute': {keyCode: 0xAD, keyName: 'VolumeMute', shiftModifier: false}, + 'Volume-Down': {keyCode: 0xAE, keyName: 'VolumeDown', + shiftModifier: false}, + 'Volume-Up': {keyCode: 0xAF, keyName: 'VolumeUp', shiftModifier: false}, 'Change-Window': {keyCode: 0xB6, shiftModifier: false}, - ';': {keyCode: 0xBA, shiftModifier: false}, - ':': {keyCode: 0xBA, shiftModifier: true}, - '=': {keyCode: 0xBB, shiftModifier: false}, - '+': {keyCode: 0xBB, shiftModifier: true}, - ',': {keyCode: 0xBC, shiftModifier: false}, - '<': {keyCode: 0xBC, shiftModifier: true}, - '-': {keyCode: 0xBD, shiftModifier: false}, - '_': {keyCode: 0xBD, shiftModifier: true}, - '.': {keyCode: 0xBE, shiftModifier: false}, - '>': {keyCode: 0xBE, shiftModifier: true}, - '/': {keyCode: 0xBF, shiftModifier: false}, - '?': {keyCode: 0xBF, shiftModifier: true}, - '`': {keyCode: 0xC0, shiftModifier: false}, - '~': {keyCode: 0xC0, shiftModifier: true}, - 'Brightness-Down': {keyCode: 0xD8, shiftModifier: false}, - 'Brightness-Up': {keyCode: 0xD9, shiftModifier: false}, - '[': {keyCode: 0xDB, shiftModifier: false}, - '{': {keyCode: 0xDB, shiftModifier: true}, - '\\': {keyCode: 0xDC, shiftModifier: false}, - '|': {keyCode: 0xDC, shiftModifier: true}, - ']': {keyCode: 0xDD, shiftModifier: false}, - '}': {keyCode: 0xDD, shiftModifier: true}, - '\'': {keyCode: 0xDE, shiftModifier: false}, - '"': {keyCode: 0xDE, shiftModifier: true}, + ';': {keyCode: 0xBA, keyName: 'Semicolon', shiftModifier: false}, + ':': {keyCode: 0xBA, keyName: 'Semicolon',shiftModifier: true}, + '=': {keyCode: 0xBB, keyName: 'Equal', shiftModifier: false}, + '+': {keyCode: 0xBB, keyName: 'Equal', shiftModifier: true}, + ',': {keyCode: 0xBC, keyName: 'Comma', shiftModifier: false}, + '<': {keyCode: 0xBC, keyName: 'Comma', shiftModifier: true}, + '-': {keyCode: 0xBD, keyName: 'Minus', shiftModifier: false}, + '_': {keyCode: 0xBD, keyName: 'Minus', shiftModifier: true}, + '.': {keyCode: 0xBE, keyName: 'Period', shiftModifier: false}, + '>': {keyCode: 0xBE, keyName: 'Period', shiftModifier: true}, + '/': {keyCode: 0xBF, keyName: 'Slash', shiftModifier: false}, + '?': {keyCode: 0xBF, keyName: 'Slash', shiftModifier: true}, + '`': {keyCode: 0xC0, keyName: 'Backquote', shiftModifier: false}, + '~': {keyCode: 0xC0, keyName: 'Backquote', shiftModifier: true}, + 'Brightness-Down': {keyCode: 0xD8, keyName: 'BrightnessDown', + shiftModifier: false}, + 'Brightness-Up': {keyCode: 0xD9, keyName: 'BrightnessUp', + shiftModifier: false}, + '[': {keyCode: 0xDB, keyName: 'BracketLeft', shiftModifier: false}, + '{': {keyCode: 0xDB, keyName: 'BracketLeft', shiftModifier: true}, + '\\': {keyCode: 0xDC, keyName: 'Backslash', shiftModifier: false}, + '|': {keyCode: 0xDC, keyName: 'Backslash', shiftModifier: true}, + ']': {keyCode: 0xDD, keyName: 'BracketRight', shiftModifier: false}, + '}': {keyCode: 0xDD, keyName: 'BracketRight', shiftModifier: true}, + '\'': {keyCode: 0xDE, keyName: 'Quote', shiftModifier: false}, + '"': {keyCode: 0xDE, keyName: 'Quote', shiftModifier: true}, }; Polymer('kb-key-codes', { @@ -163,6 +169,7 @@ if (entry) { return { keyCode: entry.keyCode, + keyName: entry.keyName || 'Unidentified', shiftModifier: entry.shiftModifier }; } @@ -171,6 +178,7 @@ // Special case of accented characters. return { keyCode: 0, + keyName: 'Unidentified', shiftModifier: false }; }, @@ -187,16 +195,18 @@ createVirtualKeyEvent: function(detail, type) { var char = detail.char; var keyCode = detail.keyCode; + var keyName = detail.keyName; // The shift modifier is handled specially. Some charactares like '+' // {keyCode: 0xBB, shiftModifier: true}, are available on non-upper // keysets, and so we rely on caching the correct shiftModifier. If // the cached value of the shiftModifier is undefined, we defer to // the shiftModifier in the detail. var shiftModifier = detail.shiftModifier; - if (keyCode == undefined) { + if (keyCode == undefined || keyName == undefined) { var state = this.GetKeyCodeAndModifiers(char); if (state) { - keyCode = state.keyCode; + keyCode = keyCode || state.keyCode; + keyName = keyName || state.keyName; shiftModifier = (state.shiftModifier == undefined) ? shiftModifier : state.shiftModifier; } else { @@ -213,6 +223,7 @@ type: type, charValue: char.charCodeAt(0), keyCode: keyCode, + keyName: keyName, modifiers: modifiers }; }, diff --git a/ui/keyboard/resources/elements/kb-key-sequence.html b/ui/keyboard/resources/elements/kb-key-sequence.html index f8bc2d9e4d..0157f93e33 100644 --- a/ui/keyboard/resources/elements/kb-key-sequence.html +++ b/ui/keyboard/resources/elements/kb-key-sequence.html @@ -58,6 +58,7 @@ var state = getKeyCodeAndModifiers(keyCodeIndex); if (state) { key.keyCode = state.keyCode; + key.keyName = state.keyName; key.shiftModifier = state.shiftModifier; } replacement.appendChild(key); diff --git a/ui/keyboard/resources/elements/kb-key.html b/ui/keyboard/resources/elements/kb-key.html index cd7522c17f..a7dae77f9f 100644 --- a/ui/keyboard/resources/elements/kb-key.html +++ b/ui/keyboard/resources/elements/kb-key.html @@ -5,7 +5,7 @@ --> <polymer-element name="kb-key" extends="kb-key-base" - attributes="image imageSize keyCode shiftModifier weight"> + attributes="image imageSize keyCode keyName shiftModifier weight"> <template> <style> :host { @@ -13,7 +13,7 @@ * handling of {{}} in CSS rules. Switch back to * "-webkit-box-flex: {{weight}}" once the regression is fixed * (https://github.com/Polymer/polymer/issues/270). */ - -webkit-box-flex: 1; + -webkit-box-flex: 100; background-color: #3b3b3e; /* TODO(rsadam): remove when {{}} regression is fixed */ background-image: none; @@ -88,6 +88,15 @@ * @type {number|undefined} */ keyCode: undefined, + + /** + * Name of the key as defined in the DOM3 specification for key events. + * Like the keyCode, the keyName is independent of the state of the + * modifier keys. + * @type {string|undefined} + */ + keyName: undefined, + /** * Whether the shift key is pressed when producing the key value. * @type {boolean} @@ -98,7 +107,7 @@ * Keys with a high weighting are wider than normal keys. * @type {number} */ - weight: 1, + weight: 100, /** * Called when the image attribute changes. This is used to set the @@ -130,6 +139,7 @@ populateDetails: function(caller) { var details = this.super([caller]); details.keyCode = this.keyCode; + details.keyName = this.keyName; details.shiftModifier = this.shiftModifier; return details; }, @@ -150,7 +160,7 @@ <!-- Special keys --> <polymer-element name="kb-abc-key" class="symbol dark" char="Invalid" - extends="kb-key"> + extends="kb-key" weight="125"> <script> Polymer('kb-abc-key', { populateDetails: function(caller) { diff --git a/ui/keyboard/resources/elements/kb-keyboard.html b/ui/keyboard/resources/elements/kb-keyboard.html index bc66fe9491..e0f0663b6f 100644 --- a/ui/keyboard/resources/elements/kb-keyboard.html +++ b/ui/keyboard/resources/elements/kb-keyboard.html @@ -7,9 +7,10 @@ <polymer-element name="kb-keyboard" on-key-over="{{keyOver}}" on-key-up="{{keyUp}}" on-key-down="{{keyDown}}" on-key-longpress="{{keyLongpress}}" on-pointerup="{{up}}" - on-pointerdown="{{down}}" on-enable-sel="{{enableSel}}" - on-enable-dbl="{{enableDbl}}" on-key-out="{{keyOut}}" - on-show-options="{{showOptions}}" on-set-layout="{{setLayout}}" + on-pointerdown="{{down}}" on-pointerout="{{out}}" + on-enable-sel="{{enableSel}}" on-enable-dbl="{{enableDbl}}" + on-key-out="{{keyOut}}" on-show-options="{{showOptions}}" + on-set-layout="{{setLayout}}" attributes="keyset layout inputType inputTypeToLayoutMap"> <template> <style> @@ -117,7 +118,16 @@ * @const * @type {number} */ - var MIN_SWIPE_DIST = 60; + var MIN_SWIPE_DIST_X = 50; + var MIN_SWIPE_DIST_Y = 20; + + /** + * The maximum swipe distance that will trigger hintText of a key + * to be typed. + * @const + * @type {number} + */ + var MAX_SWIPE_FLICK_DIST = 60; /** * The boolean to decide if it is swipe in process or finished. @@ -150,14 +160,25 @@ /** * A structure to track the current swipe status. */ - var swipeStatus = { + var swipeTracker = { + /** + * The latest PointerMove event in the swipe. + * @type {Object} + */ + currentEvent: undefined, + + /** + * Whether or not a swipe changes direction. + * @type {false} + */ + isComplex: false, /** * The count of horizontal and vertical movement. * @type {number} */ - offset_x : 0, - offset_y : 0, + offset_x : 0, + offset_y : 0, /** * Last touch coordinate. @@ -167,6 +188,12 @@ pre_y : 0, /** + * The PointerMove event which triggered the swipe. + * @type {Object} + */ + startEvent: undefined, + + /** * The flag of current modifier key. * @type {number} */ @@ -185,6 +212,50 @@ swipeIndex: 0, /** + * Returns the combined direction of the x and y offsets. + * @return {number} The latest direction. + */ + getOffsetDirection: function() { + // TODO (rsadam): Use angles to figure out the direction. + var direction = 0; + // Checks for horizontal swipe. + if (Math.abs(this.offset_x) > MIN_SWIPE_DIST_X) { + if (this.offset_x > 0) { + direction |= SWIPE_DIRECTION.RIGHT; + } else { + direction |= SWIPE_DIRECTION.LEFT; + } + } + // Checks for vertical swipe. + if (Math.abs(this.offset_y) > MIN_SWIPE_DIST_Y) { + if (this.offset_y < 0) { + direction |= SWIPE_DIRECTION.UP; + } else { + direction |= SWIPE_DIRECTION.DOWN; + } + } + return direction; + }, + + /** + * Populates the swipe update details. + * @param {boolean} endSwipe Whether this is the final event for this + * swipe. + * @return {Object} The current state of the swipeTracker. + */ + populateDetails: function(endSwipe) { + var detail = {}; + detail.direction = this.swipeDirection; + detail.index = this.swipeIndex; + detail.status = this.swipeStatus; + detail.endSwipe = endSwipe; + detail.startEvent = this.startEvent; + detail.currentEvent = this.currentEvent; + detail.isComplex = this.isComplex; + return detail; + }, + + /** * Reset all the values when swipe finished. */ resetAll: function() { @@ -195,7 +266,45 @@ this.swipeFlags = 0; this.swipeDirection = 0; this.swipeIndex = 0; - } + this.startEvent = undefined; + this.currentEvent = undefined; + this.isComplex = false; + }, + + /** + * Updates the swipe path with the current event. + * @param {Object} event The PointerEvent that triggered this update. + * @return {boolean} Whether or not to notify swipe observers. + */ + update: function(event) { + if(!event.isPrimary) + return false; + // Update priors. + this.offset_x += event.screenX - this.pre_x; + this.offset_y += event.screenY - this.pre_y; + this.pre_x = event.screenX; + this.pre_y = event.screenY; + + // Check if movement crosses minimum thresholds in each direction. + var direction = this.getOffsetDirection(); + if (direction == 0) + return false; + // If swipeIndex is zero the current event is triggering the swipe. + if (this.swipeIndex == 0) { + this.startEvent = event; + } else if (direction != this.swipeDirection) { + // Toggle the isComplex flag. + this.isComplex = true; + } + // Update the swipe tracker. + this.swipeDirection = direction; + this.offset_x = 0; + this.offset_y = 0; + this.currentEvent = event; + this.swipeIndex++; + return true; + }, + }; Polymer('kb-keyboard', { @@ -242,7 +351,7 @@ ready: function() { this.voiceInput_ = new VoiceInput(this); - this.swipeHandler = this.onSwipeUpdate.bind(this); + this.swipeHandler = this.move.bind(this); }, /** @@ -312,55 +421,67 @@ }, /** - * This function is bound to swipeHandler. And swipeHandler handle - * the pointermove event after pointerdown event happened. - * @para {PointerEvent} event. + * Handles a swipe update. + * param {Object} detail The swipe update details. */ - onSwipeUpdate: function(event) { - if (!event.isPrimary) - return; - swipeStatus.offset_x += event.screenX - swipeStatus.pre_x; - // swipeStatus.offset_y += event.screenY - swipeStatus.pre_y; - if (Math.abs(swipeStatus.offset_x) > MIN_SWIPE_DIST || - Math.abs(swipeStatus.offset_y) > MIN_SWIPE_DIST) { - swipeInProgress = true; - if (this.lastPressedKey) { - this.lastPressedKey.classList.remove('active'); - this.lastPressedKey = null; - } - } - if (swipeStatus.offset_x > MIN_SWIPE_DIST) { - swipeStatus.swipeDirection |= SWIPE_DIRECTION.RIGHT; - swipeStatus.swipeIndex++; - swipeStatus.offset_x = 0; - } else if (swipeStatus.offset_x < -MIN_SWIPE_DIST) { - swipeStatus.swipeDirection |= SWIPE_DIRECTION.LEFT; - swipeStatus.swipeIndex--; - swipeStatus.offset_x = 0; - } - // Swipe vertically only when the swipe reaches the gradient of 45 - // degree. This can also be larger. - if (Math.abs(event.screenY - swipeStatus.pre_y) > - Math.abs(event.screenX - swipeStatus.pre_x)) { - if (swipeStatus.offset_y > MIN_SWIPE_DIST) { - swipeStatus.swipeDirection |= SWIPE_DIRECTION.DOWN; - swipeStatus.offset_y = 0; - } else if (swipeStatus.offset_y < -MIN_SWIPE_DIST) { - swipeStatus.swipeDirection |= SWIPE_DIRECTION.UP; - swipeStatus.offset_y = 0; - } - } - if (swipeStatus.swipeDirection) { + onSwipeUpdate: function(detail) { + var direction = detail.direction; + if (!direction) + console.error("Swipe direction cannot be: " + direction); + // Triggers swipe editting if it's a purely horizontal swipe. + if (!(direction & (SWIPE_DIRECTION.UP | SWIPE_DIRECTION.DOWN))) { + // Nothing to do if the swipe has ended. + if (detail.endSwipe) + return; var modifiers = 0; - if (swipeStatus.swipeIndex % 2 != 0) { + // TODO (rsadam): This doesn't take into account index shifts caused + // by vertical swipes. + if (detail.index % 2 != 0) { modifiers |= Modifier.SHIFT; modifiers |= Modifier.CONTROL; } - MoveCursor(swipeStatus.swipeDirection, modifiers); - swipeStatus.swipeDirection = 0; + MoveCursor(direction, modifiers); + return; + } + // Triggers swipe hintText if it's a purely vertical swipe. + if (!(direction & (SWIPE_DIRECTION.LEFT | SWIPE_DIRECTION.RIGHT))) { + // Check if event is relevant to us. + if ((!detail.endSwipe) || + (direction & SWIPE_DIRECTION.DOWN) || + (detail.isComplex)) { + return; + } + // Too long a swipe. + var distance = Math.abs(detail.startEvent.screenY - + detail.currentEvent.screenY); + if (distance > MAX_SWIPE_FLICK_DIST) + return; + var triggerKey = detail.startEvent.target; + // Swipe-up on a key without hintText. + if (!triggerKey || !triggerKey.hintTextValue) + return; + var detail = {}; + detail.char = triggerKey.hintTextValue; + this.keyTyped(detail); + return; } - swipeStatus.pre_x = event.screenX; - swipeStatus.pre_y = event.screenY; + }, + + /** + * This function is bound to swipeHandler. Updates the current swipe + * status so that PointerEvents can be converted to Swipe events. + * @param {PointerEvent} event. + */ + move: function(event) { + if (!swipeTracker.update(event)) + return; + // Conversion was successful, swipe is now in progress. + swipeInProgress = true; + if (this.lastPressedKey) { + this.lastPressedKey.classList.remove('active'); + this.lastPressedKey = null; + } + this.onSwipeUpdate(swipeTracker.populateDetails(false)); }, /** @@ -466,8 +587,8 @@ */ down: function(event) { if (event.isPrimary) { - swipeStatus.pre_x = event.screenX; - swipeStatus.pre_y = event.screenY; + swipeTracker.pre_x = event.screenX; + swipeTracker.pre_y = event.screenY; this.addEventListener("pointermove", this.swipeHandler, false); } }, @@ -506,12 +627,32 @@ // all the data should be reset to prepare for the next session. if (event.isPrimary && swipeInProgress) { swipeInProgress = false; - swipeStatus.resetAll(); + this.onSwipeUpdate(swipeTracker.populateDetails(true)) + swipeTracker.resetAll(); } this.removeEventListener('pointermove', this.swipeHandler, false); }, /** + * Handles PointerOut event. This is used for when a swipe gesture goes + * outside of the keyboard window. + * @param {Object} event The pointerout event that bubbled to the + * kb-keyboard. + */ + out: function(event) { + // Ignore if triggered from one of the keys. + if (this.compareDocumentPosition(event.relatedTarget) & + Node.DOCUMENT_POSITION_CONTAINED_BY) + return; + if (swipeInProgress) + this.onSwipeUpdate(swipeTracker.populateDetails(true)) + // Touched outside of the keyboard area, so disables swipe. + swipeInProgress = false; + swipeTracker.resetAll(); + this.removeEventListener('pointermove', this.swipeHandler, false); + }, + + /** * Handles key-up event that is sent by kb-key-base. * @param {CustomEvent} event The key-up event dispatched by kb-key-base. * @param {Object} detail The detail of pressed kb-key. @@ -559,7 +700,7 @@ case 'Ctrl': case 'Alt': enterUpperOnSpace = false; - swipeStatus.swipeFlags = 0; + swipeTracker.swipeFlags = 0; return; case 'Microphone': this.voiceInput_.onDown(); diff --git a/ui/keyboard/resources/index.html b/ui/keyboard/resources/index.html index c4890d8e83..16733ba6b7 100644 --- a/ui/keyboard/resources/index.html +++ b/ui/keyboard/resources/index.html @@ -10,7 +10,7 @@ <meta charset="UTF-8"> <link rel="stylesheet" href="main.css"> <script src="constants.js"></script> - <script src="polymer.min.js"></script> + <script src="polymer_loader.js"></script> <script src="api_adapter.js"></script> <script src="voice_input.js"></script> <script src="main.js"></script> diff --git a/ui/keyboard/resources/layouts/dvorak.html b/ui/keyboard/resources/layouts/dvorak.html index 6da7862e2e..d3d9ee440d 100644 --- a/ui/keyboard/resources/layouts/dvorak.html +++ b/ui/keyboard/resources/layouts/dvorak.html @@ -9,28 +9,30 @@ <template> <kb-keyset id="dvorak-upper"> <kb-row> - <kb-key class="tab dark" char="	" align="left">tab</kb-key> + <kb-key class="dark" char="	" align="left" + weight="120">tab</kb-key> <kb-key-sequence keys="",.PYFGCRL" hintTexts="1234567890"> </kb-key-sequence> - <kb-key class="backspace dark" char="" repeat - align="right">backspace</kb-key> + <kb-key class="dark" char="" repeat align="right" + weight="140">backspace</kb-key> </kb-row> <kb-row> - <kb-key class="microphone dark" char="Microphone"></kb-key> + <kb-key class="microphone dark" char="Microphone" weight="110"></kb-key> <kb-key-sequence keys="AOEUIDHTNS"></kb-key-sequence> - <kb-key class='return dark' char="
" align="right">enter</kb-key> + <kb-key class="dark" char="
" align="right" + weight="150">enter</kb-key> </kb-row> <kb-row> - <kb-shift-key weight="1.8" align="left">shift</kb-shift-key> + <kb-shift-key weight="130" align="left">shift</kb-shift-key> <kb-key-sequence keys=";QJKXBMWVZ"></kb-key-sequence> - <kb-shift-key weight="1.8" align="right">shift</kb-shift-key> + <kb-shift-key weight="130" align="right">shift</kb-shift-key> </kb-row> <kb-row> - <kb-key class="symbol dark" toKeyset="down:symbol" char="Invalid" - align="left">#123</kb-key> + <kb-key class="dark" toKeyset="down:symbol" char="Invalid" + align="left" weight="130">#123</kb-key> <kb-key-import importId="spacebar-row"></kb-key-import> <kb-key class="symbol dark" toKeyset="down:symbol" char="Invalid" - align="right">#123</kb-key> + align="right" weight="130">#123</kb-key> <kb-hide-keyboard-key></kb-hide-keyboard-key> </kb-row> <kb-altkey-container hidden> @@ -39,28 +41,30 @@ <kb-keyset id="dvorak-lower" isDefault=true> <kb-row> - <kb-key class="tab dark" char="	" align="left">tab</kb-key> + <kb-key class="dark" char="	" align="left" + weight="120">tab</kb-key> <kb-key-sequence keys="",.pyfgcrl" hintTexts="1234567890"> </kb-key-sequence> - <kb-key class="backspace dark" char="" repeat - align="right">backspace</kb-key> + <kb-key class="dark" char="" repeat align="right" + weight="140">backspace</kb-key> </kb-row> <kb-row> - <kb-key class="microphone dark" char="Microphone"></kb-key> + <kb-key class="microphone dark" char="Microphone" weight="110"></kb-key> <kb-key-sequence keys="aoeuidhtns"></kb-key-sequence> - <kb-key class='return dark' char="
" align="right">enter</kb-key> + <kb-key class="dark" char="
" align="right" + weight="150">enter</kb-key> </kb-row> <kb-row> - <kb-shift-key weight="1.8" align="left">shift</kb-shift-key> + <kb-shift-key weight="130" align="left">shift</kb-shift-key> <kb-key-sequence keys=";qjkxbmwvz"></kb-key-sequence> - <kb-shift-key weight="1.8" align="right">shift</kb-shift-key> + <kb-shift-key weight="130" align="right">shift</kb-shift-key> </kb-row> <kb-row> - <kb-key class="symbol dark" toKeyset="down:symbol" char="Invalid" - align="left">#123</kb-key> + <kb-key class="dark" toKeyset="down:symbol" char="Invalid" + align="left" weight="130">#123</kb-key> <kb-key-import importId="spacebar-row"></kb-key-import> <kb-key class="symbol dark" toKeyset="down:symbol" char="Invalid" - align="right">#123</kb-key> + align="right" weight="130">#123</kb-key> <kb-hide-keyboard-key></kb-hide-keyboard-key> </kb-row> <kb-altkey-container hidden> @@ -69,27 +73,29 @@ <kb-keyset id="dvorak-symbol"> <kb-row> - <kb-key class="tab dark" char="	" align="left">tab</kb-key> + <kb-key class="dark" char="	" align="left" + weight="120">tab</kb-key> <kb-key-sequence keys="1234567890"></kb-key-sequence> - <kb-key class="backspace dark" char="" repeat - align="right">backspace</kb-key> + <kb-key class="dark" char="" repeat align="right" + weight="140">backspace</kb-key> </kb-row> <kb-row> - <kb-key class="microphone dark" char="Microphone"></kb-key> + <kb-key class="microphone dark" char="Microphone" weight="110"></kb-key> <kb-key-sequence keys="@#$%&*-=()"></kb-key-sequence> - <kb-key class='return dark' char="
" align="right">enter</kb-key> + <kb-key class="dark" char="
" align="right" + weight="150">enter</kb-key> </kb-row> <kb-row> - <kb-key class="left-more dark" toKeyset="down:more" char="Invalid" - align="left">more</kb-key> + <kb-key class="dark" toKeyset="down:more" char="Invalid" + align="left" weight="280">more</kb-key> <kb-key-sequence keys="!"':;/?"></kb-key-sequence> - <kb-key class="right-more dark" toKeyset="down:more" char="Invalid" - align="right">more</kb-key> + <kb-key class="dark" toKeyset="down:more" char="Invalid" + align="right" weight="280">more</kb-key> </kb-row> <kb-row> - <kb-abc-key align="left">abc</kb-abc-key> + <kb-abc-key align="left" weight="130">abc</kb-abc-key> <kb-key-import importId="spacebar-row"></kb-key-import> - <kb-abc-key align="right">abc</kb-abc-key> + <kb-abc-key align="right" weight="130">abc</kb-abc-key> <kb-hide-keyboard-key></kb-hide-keyboard-key> </kb-row> <kb-altkey-container hidden> @@ -98,34 +104,36 @@ <kb-keyset id="dvorak-more"> <kb-row> - <kb-key class="tab dark" char="	" align="left">tab</kb-key> + <kb-key class="dark" char="	" align="left" + weight="120">tab</kb-key> <kb-key>~</kb-key><kb-key>`</kb-key><kb-key>|</kb-key><kb-key>^</kb-key> <kb-key>+</kb-key><kb-key>=</kb-key><kb-key>{</kb-key><kb-key>}</kb-key> <kb-key><</kb-key><kb-key>></kb-key> - <kb-key class="backspace dark" char="" repeat - align="right">backspace</kb-key> + <kb-key class="dark" char="" repeat align="right" + weight="140">backspace</kb-key> </kb-row> <kb-row> - <kb-key class="microphone dark" char="Microphone"></kb-key> + <kb-key class="microphone dark" char="Microphone" weight="150"></kb-key> <kb-key>£</kb-key><kb-key>¢</kb-key><kb-key>€</kb-key> <kb-key>™</kb-key><kb-key>©</kb-key><kb-key>®</kb-key> <kb-key>\</kb-key><kb-key>[</kb-key><kb-key>]</kb-key> - <kb-key class='return dark' char="
" align="right">enter</kb-key> + <kb-key class="dark" char="
" align="right" + weight="210">enter</kb-key> </kb-row> <kb-row> - <kb-key class="left-more dark" toKeyset="down:symbol" char="Invalid" - align="left">#123</kb-key> + <kb-key class="dark" toKeyset="down:symbol" char="Invalid" + align="left" weight="180">#123</kb-key> <kb-key>×</kb-key><kb-key>÷</kb-key><kb-key>_</kb-key> <kb-key>§</kb-key><kb-key>¶</kb-key><kb-key>¡</kb-key> <kb-key>¿</kb-key><kb-key>•</kb-key><kb-key>Δ</kb-key> - <kb-key class="right-more dark" toKeyset="down:symbol" char="Invalid" - align="right">#123</kb-key> + <kb-key class="dark" toKeyset="down:symbol" char="Invalid" + align="left" weight="180">#123</kb-key> </kb-row> <kb-row> - <kb-abc-key align="left">abc</kb-abc-key> + <kb-abc-key align="left" weight="130">abc</kb-abc-key> <kb-key-import importId="spacebar-row"></kb-key-import> - <kb-abc-key align="right">abc</kb-abc-key> + <kb-abc-key align="right" weight="130">abc</kb-abc-key> <kb-hide-keyboard-key></kb-hide-keyboard-key> </kb-row> </kb-keyset> -</template> +</template>
\ No newline at end of file diff --git a/ui/keyboard/resources/layouts/qwerty.html b/ui/keyboard/resources/layouts/qwerty.html index e1acfb6e3a..b8f83f1c0c 100644 --- a/ui/keyboard/resources/layouts/qwerty.html +++ b/ui/keyboard/resources/layouts/qwerty.html @@ -9,26 +9,32 @@ <template> <kb-keyset id="qwerty-upper"> <kb-row> - <kb-key class="tab dark" char="	" align="left">tab</kb-key> - <kb-key-sequence keys="QWERTYUIOP" hintTexts="1234567890"></kb-key-sequence> - <kb-key class="backspace dark" char="" repeat align="right">backspace</kb-key> + <kb-key class="dark" char="	" align="left" + weight="120">tab</kb-key> + <kb-key-sequence keys="QWERTYUIOP" hintTexts="1234567890"> + </kb-key-sequence> + <kb-key class="dark" char="" repeat align="right" + weight="140">backspace</kb-key> </kb-row> <kb-row> - <kb-key class="microphone dark" char="Microphone"></kb-key> + <kb-key class="microphone dark" char="Microphone" weight="150"></kb-key> <kb-key-sequence keys="ASDFGHJKL"></kb-key-sequence> - <kb-key class='return dark' char="
" align="right">enter</kb-key> + <kb-key class="dark" char="
" align="right" + weight="210">enter</kb-key> </kb-row> <kb-row> - <kb-shift-key weight="1.8" align="left">shift</kb-shift-key> + <kb-shift-key weight="180" align="left">shift</kb-shift-key> <kb-key-sequence keys="ZXCVBNM"></kb-key-sequence> <kb-key invert hintText="!" char=",">,</kb-key> <kb-key invert hintText="?" char=".">.</kb-key> - <kb-shift-key weight="1.8" align="right">shift</kb-shift-key> + <kb-shift-key weight="180" align="right">shift</kb-shift-key> </kb-row> <kb-row> - <kb-key class="symbol dark" toKeyset="down:symbol" char="Invalid" align="left">#123</kb-key> + <kb-key class="dark" toKeyset="down:symbol" char="Invalid" + align="left" weight="130">#123</kb-key> <kb-key-import importId="spacebar-row"></kb-key-import> - <kb-key class="symbol dark" toKeyset="down:symbol" char="Invalid" align="right">#123</kb-key> + <kb-key class="dark" toKeyset="down:symbol" char="Invalid" + align="right" weight="130">#123</kb-key> <kb-hide-keyboard-key></kb-hide-keyboard-key> </kb-row> <kb-altkey-container hidden> @@ -37,25 +43,31 @@ <kb-keyset id="qwerty-lower" isDefault=true> <kb-row> - <kb-key class="tab dark" char="	" align="left">tab</kb-key> - <kb-key-sequence keys="qwertyuiop" hintTexts="1234567890"></kb-key-sequence> - <kb-key class="backspace dark" char="" repeat align="right">backspace</kb-key> + <kb-key class="dark" char="	" align="left" + weight="120">tab</kb-key> + <kb-key-sequence keys="qwertyuiop" hintTexts="1234567890"> + </kb-key-sequence> + <kb-key class="dark" char="" repeat align="right" + weight="140">backspace</kb-key> </kb-row> <kb-row> - <kb-key class="microphone dark" char="Microphone"></kb-key> + <kb-key class="microphone dark" char="Microphone" weight="150"></kb-key> <kb-key-sequence keys="asdfghjkl"></kb-key-sequence> - <kb-key class='return dark' char="
" align="right">enter</kb-key> + <kb-key class="dark" char="
" align="right" + weight="210">enter</kb-key> </kb-row> <kb-row> - <kb-shift-key weight="1.8" align="left">shift</kb-shift-key> + <kb-shift-key weight="180" align="left">shift</kb-shift-key> <kb-key-sequence keys="zxcvbnm"></kb-key-sequence> <kb-key hintText="!">,</kb-key><kb-key hintText="?">.</kb-key> - <kb-shift-key weight="1.8" align="right">shift</kb-shift-key> + <kb-shift-key weight="180" align="right">shift</kb-shift-key> </kb-row> <kb-row> - <kb-key class="symbol dark" toKeyset="down:symbol" char="Invalid" align="left">#123</kb-key> + <kb-key class="dark" toKeyset="down:symbol" char="Invalid" + align="left" weight="130">#123</kb-key> <kb-key-import importId="spacebar-row"></kb-key-import> - <kb-key class="symbol dark" toKeyset="down:symbol" char="Invalid" align="right">#123</kb-key> + <kb-key class="dark" toKeyset="down:symbol" char="Invalid" + align="right" weight="130">#123</kb-key> <kb-hide-keyboard-key></kb-hide-keyboard-key> </kb-row> <kb-altkey-container hidden> @@ -64,32 +76,37 @@ <kb-keyset id="qwerty-symbol"> <kb-row> - <kb-key class="tab dark" char="	" align="left">tab</kb-key> + <kb-key class="dark" char="	" align="left" + weight="120">tab</kb-key> <kb-key>1</kb-key><kb-key>2</kb-key> <kb-key>3</kb-key><kb-key>4</kb-key> <kb-key>5</kb-key><kb-key>6</kb-key><kb-key>7</kb-key> <kb-key>8</kb-key><kb-key>9</kb-key><kb-key>0</kb-key> - <kb-key class="backspace dark" char="" repeat align="right">backspace</kb-key> + <kb-key class="dark" char="" repeat align="right" + weight="140">backspace</kb-key> </kb-row> <kb-row> - <kb-key class="microphone dark" char="Microphone"></kb-key> + <kb-key class="microphone dark" char="Microphone" weight="150"></kb-key> <kb-key>@</kb-key><kb-key>#</kb-key><kb-key>$</kb-key> <kb-key>%</kb-key><kb-key>&</kb-key> <kb-key>*</kb-key><kb-key>/</kb-key> <kb-key>(</kb-key><kb-key>)</kb-key> - <kb-key class='return dark' char="
" align="right">enter</kb-key> + <kb-key class="dark" char="
" align="right" + weight="210">enter</kb-key> </kb-row> <kb-row> - <kb-key class="left-more dark" toKeyset="down:more" char="Invalid" align="left">more</kb-key> + <kb-key class="dark" toKeyset="down:more" char="Invalid" align="left" + weight="180">more</kb-key> <kb-key>:</kb-key><kb-key>;</kb-key><kb-key>-</kb-key><kb-key>'</kb-key> <kb-key>"</kb-key><kb-key>!</kb-key> <kb-key>?</kb-key><kb-key>,</kb-key><kb-key>.</kb-key> - <kb-key class="right-more dark" toKeyset="down:more" char="Invalid" align="right">more</kb-key> + <kb-key class="dark" toKeyset="down:more" char="Invalid" align="right" + weight="180">more</kb-key> </kb-row> <kb-row> - <kb-abc-key align="left">abc</kb-abc-key> + <kb-abc-key align="left" weight="130">abc</kb-abc-key> <kb-key-import importId="spacebar-row"></kb-key-import> - <kb-abc-key align="right">abc</kb-abc-key> + <kb-abc-key align="right" weight="130">abc</kb-abc-key> <kb-hide-keyboard-key></kb-hide-keyboard-key> </kb-row> <kb-altkey-container hidden> @@ -98,30 +115,39 @@ <kb-keyset id="qwerty-more"> <kb-row> - <kb-key class="tab dark" char="	" align="left">tab</kb-key> + <kb-key class="dark" char="	" align="left" + weight="120">tab</kb-key> <kb-key>~</kb-key><kb-key>`</kb-key><kb-key>|</kb-key><kb-key>^</kb-key> <kb-key>+</kb-key><kb-key>=</kb-key><kb-key>{</kb-key><kb-key>}</kb-key> <kb-key><</kb-key><kb-key>></kb-key> - <kb-key class="backspace dark" char="" repeat align="right">backspace</kb-key> + <kb-key class="dark" char="" repeat align="right" + weight="140">backspace</kb-key> </kb-row> <kb-row> - <kb-key class="microphone dark" char="Microphone"></kb-key> - <kb-key>£</kb-key><kb-key>¢</kb-key><kb-key>€</kb-key><kb-key>™</kb-key> - <kb-key>©</kb-key><kb-key>®</kb-key><kb-key>\</kb-key><kb-key>[</kb-key> + <kb-key class="microphone dark" char="Microphone" weight="150"></kb-key> + <kb-key>£</kb-key><kb-key>¢</kb-key> + <kb-key>€</kb-key><kb-key>™</kb-key> + <kb-key>©</kb-key><kb-key>®</kb-key> + <kb-key>\</kb-key><kb-key>[</kb-key> <kb-key>]</kb-key> - <kb-key class='return dark' char="
" align="right">enter</kb-key> + <kb-key class="dark" char="
" align="right" + weight="210">enter</kb-key> </kb-row> <kb-row> - <kb-key class="left-more dark" toKeyset="down:symbol" char="Invalid" align="left">#123</kb-key> - <kb-key>×</kb-key><kb-key>÷</kb-key><kb-key>_</kb-key><kb-key>§</kb-key> - <kb-key>¶</kb-key><kb-key>¡</kb-key><kb-key>¿</kb-key><kb-key>•</kb-key> + <kb-key class="dark" toKeyset="down:symbol" char="Invalid" + align="left" weight="180">#123</kb-key> + <kb-key>×</kb-key><kb-key>÷</kb-key> + <kb-key>_</kb-key><kb-key>§</kb-key> + <kb-key>¶</kb-key><kb-key>¡</kb-key> + <kb-key>¿</kb-key><kb-key>•</kb-key> <kb-key>Δ</kb-key> - <kb-key class="right-more dark" toKeyset="down:symbol" char="Invalid" align="right">#123</kb-key> + <kb-key class="dark" toKeyset="down:symbol" char="Invalid" + align="right" weight="180">#123</kb-key> </kb-row> <kb-row> - <kb-abc-key align="left">abc</kb-abc-key> + <kb-abc-key align="left" weight="130">abc</kb-abc-key> <kb-key-import importId="spacebar-row"></kb-key-import> - <kb-abc-key align="right">abc</kb-abc-key> + <kb-abc-key align="right" weight="130">abc</kb-abc-key> <kb-hide-keyboard-key></kb-hide-keyboard-key> </kb-row> </kb-keyset> diff --git a/ui/keyboard/resources/layouts/spacebar-row.html b/ui/keyboard/resources/layouts/spacebar-row.html index db8bcca11c..b4b0e8b499 100644 --- a/ui/keyboard/resources/layouts/spacebar-row.html +++ b/ui/keyboard/resources/layouts/spacebar-row.html @@ -6,5 +6,5 @@ <template> <kb-key class="dotcom dark" align="left">.com</kb-key> - <kb-key char=" " class="space dark" weight="6.0"></kb-key> + <kb-key char=" " class="space dark" weight="800"></kb-key> </template> diff --git a/ui/keyboard/resources/layouts/system-qwerty.html b/ui/keyboard/resources/layouts/system-qwerty.html index 74aa61dd16..53bd3ae95d 100644 --- a/ui/keyboard/resources/layouts/system-qwerty.html +++ b/ui/keyboard/resources/layouts/system-qwerty.html @@ -15,38 +15,45 @@ <kb-row> <kb-key-sequence invert=true keys="'1234567890-=" hintTexts="~!@#$%^&*()_+"> </kb-key-sequence> - <kb-key class="backspace dark" weight="2.6" char="" - repeat align="right">backspace</kb-key> + <kb-key class="dark" char="" repeat align="right" + weight="160">backspace</kb-key> </kb-row> <kb-row> - <kb-key class="tab dark" char="	" align="left">tab</kb-key> + <kb-key class="dark" char="	" align="left" + weight="160">tab</kb-key> <kb-key-sequence keys="QWERTYUIOP"></kb-key-sequence> <kb-key-sequence invert=true keys="[]\" hintTexts="{}|"></kb-key-sequence> </kb-row> <kb-row> - <kb-key class="microphone dark" char="Microphone"></kb-key> + <kb-key class="microphone dark" char="Microphone" weight="150"></kb-key> <kb-key-sequence keys="ASDFGHJKL"></kb-key-sequence> <kb-key-sequence invert=true keys=";'" hintTexts=':"'> </kb-key-sequence> - <kb-key class='return dark' char="
" align="right">enter</kb-key> + <kb-key class="dark" char="
" align="right" + weight="210">enter</kb-key> </kb-row> <kb-row> - <kb-shift-key weight="1.8" align="left">shift</kb-shift-key> + <kb-shift-key weight="230" align="left">shift</kb-shift-key> <kb-key-sequence keys="ZXCVBNM"></kb-key-sequence> - <kb-key-sequence invert=true keys=",./" hintTexts="<>?"></kb-key-sequence> - <kb-shift-key weight="1.8" align="right">shift</kb-shift-key> + <kb-key-sequence invert=true keys=",./" hintTexts="<>?"> + </kb-key-sequence> + <kb-shift-key weight="230" align="right">shift</kb-shift-key> </kb-row> <kb-row> - <kb-modifier-key class="symbol dark" weight="2.0" char="Ctrl" + <kb-modifier-key class="dark" weight="150" char="Ctrl" align="left">ctrl</kb-modifier-key> - <kb-modifier-key class="symbol dark" weight="2.0" char="Alt" + <kb-modifier-key class="dark" weight="150" char="Alt" align="left">alt</kb-modifier-key> - <kb-key char=" " class="space dark" weight="10.0"></kb-key> - <kb-key class="dark" repeat char="Arrow-Left" image="left"></kb-key> - <kb-key class="dark" repeat char="Arrow-Up" image="up"></kb-key> - <kb-key class="dark" repeat char="Arrow-Down" image="down"></kb-key> - <kb-key class="dark" repeat char="Arrow-Right" image="right"></kb-key> + <kb-key char=" " class="space dark" weight="760"></kb-key> + <kb-key class="dark" repeat char="Arrow-Left" image="left" + weight="75"> </kb-key> + <kb-key class="dark" repeat char="Arrow-Up" image="up" + weight="75"></kb-key> + <kb-key class="dark" repeat char="Arrow-Down" image="down" + weight="75"> </kb-key> + <kb-key class="dark" repeat char="Arrow-Right" image="right" + weight="75"></kb-key> <kb-hide-keyboard-key></kb-hide-keyboard-key> </kb-row> <kb-altkey-container hidden> @@ -60,36 +67,42 @@ <kb-row> <kb-key-sequence keys="'1234567890-=" hintTexts="~!@#$%^&*()_+"> </kb-key-sequence> - <kb-key class="backspace dark" weight="2.6" char="" + <kb-key class="dark" weight="160" char="" repeat align="right">backspace</kb-key> </kb-row> <kb-row> - <kb-key class="tab dark" char="	" align="left">tab</kb-key> + <kb-key class="dark" char="	" align="left" + weight="160">tab</kb-key> <kb-key-sequence keys="qwertyuiop"></kb-key-sequence> <kb-key-sequence keys="[]\" hintTexts="{}|"></kb-key-sequence> </kb-row> <kb-row> - <kb-key class="microphone dark" char="Microphone"></kb-key> + <kb-key class="microphone dark" char="Microphone" weight="150"></kb-key> <kb-key-sequence keys="asdfghjkl"></kb-key-sequence> <kb-key-sequence keys=";'" hintTexts=':"'></kb-key-sequence> - <kb-key class='return dark' char="
" align="right">enter</kb-key> + <kb-key class="dark" char="
" align="right" + weight="210">enter</kb-key> </kb-row> <kb-row> - <kb-shift-key weight="1.8" align="left">shift</kb-shift-key> + <kb-shift-key weight="230" align="left">shift</kb-shift-key> <kb-key-sequence keys="zxcvbnm"></kb-key-sequence> <kb-key-sequence keys=",./" hintTexts="<>?"></kb-key-sequence> - <kb-shift-key weight="1.8" align="right">shift</kb-shift-key> + <kb-shift-key weight="230" align="right">shift</kb-shift-key> </kb-row> <kb-row> - <kb-modifier-key class="symbol dark" weight="2.0" char="Ctrl" + <kb-modifier-key class="symbol dark" weight="150" char="Ctrl" align="left">ctrl</kb-modifier-key> - <kb-modifier-key class="symbol dark" weight="2.0" char="Alt" + <kb-modifier-key class="symbol dark" weight="150" char="Alt" align="left">alt</kb-modifier-key> - <kb-key char=" " class="space dark" weight="10.0"></kb-key> - <kb-key class="dark" repeat char="Arrow-Left" image="left"></kb-key> - <kb-key class="dark" repeat char="Arrow-Up" image="up"></kb-key> - <kb-key class="dark" repeat char="Arrow-Down" image="down"></kb-key> - <kb-key class="dark" repeat char="Arrow-Right" image="right"></kb-key> + <kb-key char=" " class="space dark" weight="760"></kb-key> + <kb-key class="dark" repeat char="Arrow-Left" image="left" + weight="75"> </kb-key> + <kb-key class="dark" repeat char="Arrow-Up" image="up" + weight="75"></kb-key> + <kb-key class="dark" repeat char="Arrow-Down" image="down" + weight="75"> </kb-key> + <kb-key class="dark" repeat char="Arrow-Right" image="right" + weight="75"></kb-key> <kb-hide-keyboard-key></kb-hide-keyboard-key> </kb-row> <kb-altkey-container hidden> diff --git a/ui/keyboard/resources/main.css b/ui/keyboard/resources/main.css index f11c40a966..e2c672adc7 100644 --- a/ui/keyboard/resources/main.css +++ b/ui/keyboard/resources/main.css @@ -37,6 +37,8 @@ kb-keyboard:not(.caps-locked)[keyset=upper] kb-shift-key { *.dark { background-color: #2a2a2c; border-top: 2px solid #3a3a3c; + font-size: 70%; + margin-left: 0.35em; } @@ -51,63 +53,6 @@ kb-keyboard:not(.caps-locked)[keyset=upper] kb-shift-key { } /** - * TODO(kevers): Use weight attribute for kb-key rather than CSS rules to - * enable special keys to be used for multiple layouts when the weights - * need to vary. - */ -.at, -.com, -.comma, -.period, -.tab { - -webkit-box-flex: 1.3 !important; -} - -.return { - -webkit-box-flex: 2.1 !important; -} - -.microphone { - -webkit-box-flex: 1.5 !important; -} - -.symbol { - -webkit-box-flex: 1.25 !important; -} - -.backspace { - -webkit-box-flex: 1.7 !important; -} - -.left-more { - -webkit-box-flex: 1.8 !important; -} - -.right-more { - -webkit-box-flex: 1.8 !important; -} - -.bar { - -webkit-box-flex: 0.6 !important; -} - -kb-key.esc, -kb-shift-key.shift, -kb-modifier-key, -kb-abc-key, -kb-key:-webkit-any(.backspace, - .dotcom, - .left-more, - .return, - .right-more, - .symbol, - .tab) { - font-size: 70%; - /* Adjust margin for consistent spacing with the smaller font size. */ - margin-left: 0.35em; -} - -/** * The microphone key is handled separately from other images since the image * displayed changes depending on whether it's pressed or not. */ diff --git a/ui/keyboard/resources/polymer.min.js b/ui/keyboard/resources/polymer.min.js deleted file mode 100644 index 915f7d9751..0000000000 --- a/ui/keyboard/resources/polymer.min.js +++ /dev/null @@ -1,5 +0,0 @@ -// 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. - -<include src="../../../third_party/polymer/polymer.min.js"></include> diff --git a/ui/keyboard/resources/polymer_loader.js b/ui/keyboard/resources/polymer_loader.js new file mode 100644 index 0000000000..f39ea61fae --- /dev/null +++ b/ui/keyboard/resources/polymer_loader.js @@ -0,0 +1,11 @@ +// Copyright 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. + +// This is necessary because polymer currently doesn't handle the configuration +// where native Custom Elements are available but native Shadow DOM is not. +// TODO(bshe): remove this line when polymer supports the configuration. +document.register = undefined; + +<include src="../../../third_party/polymer/platform.js"></include> +<include src="../../../third_party/polymer/polymer.js"></include> diff --git a/ui/keyboard/resources/webui_index.html b/ui/keyboard/resources/webui_index.html index 47ae8ed169..bdc81167fc 100644 --- a/ui/keyboard/resources/webui_index.html +++ b/ui/keyboard/resources/webui_index.html @@ -18,7 +18,7 @@ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> <link rel="stylesheet" href="main.css"> <script src="constants.js"></script> - <script src="polymer.min.js"></script> + <script src="polymer_loader.js"></script> <script src="api_adapter.js"></script> <script src="voice_input.js"></script> <link rel="import" href="elements/kb-altkey.html"> diff --git a/ui/message_center/cocoa/notification_controller_unittest.mm b/ui/message_center/cocoa/notification_controller_unittest.mm index 8ba6026782..783ad119aa 100644 --- a/ui/message_center/cocoa/notification_controller_unittest.mm +++ b/ui/message_center/cocoa/notification_controller_unittest.mm @@ -55,7 +55,7 @@ class MockMessageCenter : public message_center::FakeMessageCenter { DISALLOW_COPY_AND_ASSIGN(MockMessageCenter); }; -} +} // namespace @implementation MCNotificationController (TestingInterface) - (NSButton*)closeButton { @@ -93,11 +93,18 @@ class MockMessageCenter : public message_center::FakeMessageCenter { } @end +namespace message_center { + class NotificationControllerTest : public ui::CocoaTest { public: NSImage* TestIcon() { return [NSImage imageNamed:NSImageNameUser]; } + + protected: + message_center::NotifierId DummyNotifierId() { + return message_center::NotifierId(); + } }; TEST_F(NotificationControllerTest, BasicLayout) { @@ -109,7 +116,7 @@ TEST_F(NotificationControllerTest, BasicLayout) { ASCIIToUTF16("Jonathan and 5 others"), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); notification->set_icon(gfx::Image([TestIcon() retain])); @@ -139,7 +146,7 @@ TEST_F(NotificationControllerTest, OverflowText) { "entire thing?"), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); base::scoped_nsobject<MCNotificationController> controller( @@ -160,7 +167,7 @@ TEST_F(NotificationControllerTest, Close) { string16(), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); MockMessageCenter message_center; @@ -187,7 +194,7 @@ TEST_F(NotificationControllerTest, Update) { "default bounds."), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); base::scoped_nsobject<MCNotificationController> controller( @@ -223,7 +230,7 @@ TEST_F(NotificationControllerTest, Buttons) { string16(), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), optional, NULL)); MockMessageCenter message_center; @@ -248,7 +255,7 @@ TEST_F(NotificationControllerTest, Image) { string16(), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); NSImage* image = [NSImage imageNamed:NSImageNameFolder]; @@ -290,7 +297,7 @@ TEST_F(NotificationControllerTest, List) { UTF8ToUTF16("Notification Message - should be hidden"), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), optional, NULL)); @@ -308,3 +315,5 @@ TEST_F(NotificationControllerTest, List) { EXPECT_LT(NSMaxY([[controller listView] frame]), NSMinY([[controller titleView] frame])); } + +} // namespace message_center diff --git a/ui/message_center/cocoa/popup_collection_unittest.mm b/ui/message_center/cocoa/popup_collection_unittest.mm index 3ec7c3318f..445673d1a5 100644 --- a/ui/message_center/cocoa/popup_collection_unittest.mm +++ b/ui/message_center/cocoa/popup_collection_unittest.mm @@ -17,6 +17,8 @@ #include "ui/message_center/message_center_style.h" #include "ui/message_center/notification.h" +namespace message_center { + class PopupCollectionTest : public ui::CocoaTest { public: PopupCollectionTest() @@ -41,6 +43,10 @@ class PopupCollectionTest : public ui::CocoaTest { message_center::MessageCenter::Shutdown(); } + message_center::NotifierId DummyNotifierId() { + return message_center::NotifierId(); + } + void AddThreeNotifications() { scoped_ptr<message_center::Notification> notification; notification.reset(new message_center::Notification( @@ -51,7 +57,7 @@ class PopupCollectionTest : public ui::CocoaTest { " be displayed"), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); center_->AddNotification(notification.Pass()); @@ -63,7 +69,7 @@ class PopupCollectionTest : public ui::CocoaTest { ASCIIToUTF16("This is the second notification."), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); center_->AddNotification(notification.Pass()); @@ -80,7 +86,7 @@ class PopupCollectionTest : public ui::CocoaTest { "if the notification is way too big"), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); center_->AddNotification(notification.Pass()); @@ -135,7 +141,7 @@ TEST_F(PopupCollectionTest, AttemptFourOneOffscreen) { ASCIIToUTF16("This is the fourth notification."), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); center_->AddNotification(notification.Pass()); @@ -184,7 +190,7 @@ TEST_F(PopupCollectionTest, LayoutSpacing) { ASCIIToUTF16("This is the fourth notification."), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), optional, NULL)); center_->AddNotification(notification.Pass()); @@ -222,7 +228,7 @@ TEST_F(PopupCollectionTest, TinyScreen) { " be displayed"), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); center_->AddNotification(notification.Pass()); @@ -244,7 +250,7 @@ TEST_F(PopupCollectionTest, TinyScreen) { "long notification."), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); center_->UpdateNotification("1", notification.Pass()); @@ -288,7 +294,7 @@ TEST_F(PopupCollectionTest, UpdateIconAndBody) { "longer body"), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); center_->AddNotification(notification.Pass()); @@ -317,7 +323,7 @@ TEST_F(PopupCollectionTest, CloseCollectionBeforeNewPopupAnimationEnds) { " be displayed"), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); center_->AddNotification(notification.Pass()); @@ -350,7 +356,7 @@ TEST_F(PopupCollectionTest, CloseCollectionBeforeUpdatePopupAnimationEnds) { ASCIIToUTF16("New message."), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); center_->UpdateNotification("1", notification.Pass()); @@ -359,3 +365,5 @@ TEST_F(PopupCollectionTest, CloseCollectionBeforeUpdatePopupAnimationEnds) { // be expected. collection_.reset(); } + +} // namespace message_center diff --git a/ui/message_center/cocoa/popup_controller_unittest.mm b/ui/message_center/cocoa/popup_controller_unittest.mm index c39d163128..e443e04cc2 100644 --- a/ui/message_center/cocoa/popup_controller_unittest.mm +++ b/ui/message_center/cocoa/popup_controller_unittest.mm @@ -11,6 +11,8 @@ #import "ui/base/test/ui_cocoa_test_helper.h" #include "ui/message_center/notification.h" +namespace message_center { + class PopupControllerTest : public ui::CocoaTest { }; @@ -41,3 +43,5 @@ TEST_F(PopupControllerTest, Creation) { [controller showWindow:nil]; [controller close]; } + +} // namespace message_center diff --git a/ui/message_center/cocoa/tray_controller_unittest.mm b/ui/message_center/cocoa/tray_controller_unittest.mm index 379c3dea4f..516cf8fc5c 100644 --- a/ui/message_center/cocoa/tray_controller_unittest.mm +++ b/ui/message_center/cocoa/tray_controller_unittest.mm @@ -10,7 +10,7 @@ #include "ui/message_center/message_center.h" #include "ui/message_center/message_center_tray.h" -namespace { +namespace message_center { class TrayControllerTest : public ui::CocoaTest { public: @@ -56,4 +56,4 @@ TEST_F(TrayControllerTest, OpenLeftRight) { EXPECT_EQ(left_point.x - NSWidth(window_frame), NSMinX(window_frame)); } -} // namespace +} // namespace message_center diff --git a/ui/message_center/cocoa/tray_view_controller.mm b/ui/message_center/cocoa/tray_view_controller.mm index 6865562995..a1994ecddd 100644 --- a/ui/message_center/cocoa/tray_view_controller.mm +++ b/ui/message_center/cocoa/tray_view_controller.mm @@ -749,7 +749,7 @@ const CGFloat kTrayBottomMargin = 75; [settingsButton_ setEnabled:YES]; [clipView_ setFrozen:NO]; - messageCenter_->RemoveAllNotifications(true); + messageCenter_->RemoveAllVisibleNotifications(true); } - (void)updateQuietModeButtonImage { diff --git a/ui/message_center/cocoa/tray_view_controller_unittest.mm b/ui/message_center/cocoa/tray_view_controller_unittest.mm index 03207d965d..cb649f9bdf 100644 --- a/ui/message_center/cocoa/tray_view_controller_unittest.mm +++ b/ui/message_center/cocoa/tray_view_controller_unittest.mm @@ -16,6 +16,8 @@ #include "ui/message_center/notification.h" #include "ui/message_center/notifier_settings.h" +namespace message_center { + class TrayViewControllerTest : public ui::CocoaTest { public: TrayViewControllerTest() @@ -53,6 +55,10 @@ class TrayViewControllerTest : public ui::CocoaTest { } protected: + message_center::NotifierId DummyNotifierId() { + return message_center::NotifierId(); + } + message_center::MessageCenter* center_; // Weak, global. base::MessageLoop message_loop_; @@ -71,7 +77,7 @@ TEST_F(TrayViewControllerTest, AddRemoveOne) { ASCIIToUTF16("This is a simple test."), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); center_->AddNotification(notification_data.Pass()); @@ -105,7 +111,7 @@ TEST_F(TrayViewControllerTest, AddThreeClearAll) { ASCIIToUTF16("This is a simple test."), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); center_->AddNotification(notification.Pass()); @@ -116,7 +122,7 @@ TEST_F(TrayViewControllerTest, AddThreeClearAll) { ASCIIToUTF16("This is a simple test."), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); center_->AddNotification(notification.Pass()); @@ -127,7 +133,7 @@ TEST_F(TrayViewControllerTest, AddThreeClearAll) { ASCIIToUTF16("This is a simple test."), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); center_->AddNotification(notification.Pass()); @@ -160,7 +166,7 @@ TEST_F(TrayViewControllerTest, NoClearAllWhenNoNotifications) { ASCIIToUTF16("This is a simple test."), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); center_->AddNotification(notification.Pass()); @@ -179,7 +185,7 @@ TEST_F(TrayViewControllerTest, NoClearAllWhenNoNotifications) { ASCIIToUTF16("This is a simple test."), gfx::Image(), string16(), - message_center::NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL)); center_->AddNotification(notification.Pass()); @@ -199,8 +205,6 @@ TEST_F(TrayViewControllerTest, NoClearAllWhenNoNotifications) { NSMinX([[tray_ pauseButton] frame])); } -namespace message_center { - namespace { Notifier* NewNotifier(const std::string& id, diff --git a/ui/message_center/fake_message_center.cc b/ui/message_center/fake_message_center.cc index 98d9035b0b..7b1a093b31 100644 --- a/ui/message_center/fake_message_center.cc +++ b/ui/message_center/fake_message_center.cc @@ -74,6 +74,9 @@ void FakeMessageCenter::RemoveNotification(const std::string& id, void FakeMessageCenter::RemoveAllNotifications(bool by_user) { } +void FakeMessageCenter::RemoveAllVisibleNotifications(bool by_user) { +} + void FakeMessageCenter::SetNotificationIcon(const std::string& notification_id, const gfx::Image& image) { } @@ -127,7 +130,7 @@ void FakeMessageCenter::EnterQuietModeWithExpire( void FakeMessageCenter::SetVisibility(Visibility visible) { } -bool FakeMessageCenter::IsMessageCenterVisible() { +bool FakeMessageCenter::IsMessageCenterVisible() const { return false; } diff --git a/ui/message_center/fake_message_center.h b/ui/message_center/fake_message_center.h index 08f94eaad8..92e00146d5 100644 --- a/ui/message_center/fake_message_center.h +++ b/ui/message_center/fake_message_center.h @@ -39,6 +39,7 @@ class FakeMessageCenter : public MessageCenter { virtual void RemoveNotification(const std::string& id, bool by_user) OVERRIDE; virtual void RemoveAllNotifications(bool by_user) OVERRIDE; + virtual void RemoveAllVisibleNotifications(bool by_user) OVERRIDE; virtual void SetNotificationIcon(const std::string& notification_id, const gfx::Image& image) OVERRIDE; @@ -64,7 +65,7 @@ class FakeMessageCenter : public MessageCenter { virtual void EnterQuietModeWithExpire( const base::TimeDelta& expires_in) OVERRIDE; virtual void SetVisibility(Visibility visible) OVERRIDE; - virtual bool IsMessageCenterVisible() OVERRIDE; + virtual bool IsMessageCenterVisible() const OVERRIDE; virtual void RestartPopupTimers() OVERRIDE; virtual void PausePopupTimers() OVERRIDE; diff --git a/ui/message_center/message_center.gyp b/ui/message_center/message_center.gyp index 431ef9e9f1..6333a5ecfe 100644 --- a/ui/message_center/message_center.gyp +++ b/ui/message_center/message_center.gyp @@ -78,8 +78,6 @@ 'views/message_center_bubble.h', 'views/message_center_button_bar.cc', 'views/message_center_button_bar.h', - 'views/message_center_focus_border.h', - 'views/message_center_focus_border.cc', 'views/message_center_view.cc', 'views/message_center_view.h', 'views/message_popup_collection.cc', diff --git a/ui/message_center/message_center.h b/ui/message_center/message_center.h index 362f9186d4..1b6cbae33c 100644 --- a/ui/message_center/message_center.h +++ b/ui/message_center/message_center.h @@ -15,8 +15,6 @@ #include "ui/message_center/notification_list.h" #include "ui/message_center/notification_types.h" -class TrayViewControllerTest; - namespace base { class DictionaryValue; } @@ -89,6 +87,7 @@ class MESSAGE_CENTER_EXPORT MessageCenter { // Removes an existing notification. virtual void RemoveNotification(const std::string& id, bool by_user) = 0; virtual void RemoveAllNotifications(bool by_user) = 0; + virtual void RemoveAllVisibleNotifications(bool by_user) = 0; // Sets the icon image. Icon appears at the top-left of the notification. virtual void SetNotificationIcon(const std::string& notification_id, @@ -155,7 +154,7 @@ class MESSAGE_CENTER_EXPORT MessageCenter { virtual void SetVisibility(Visibility visible) = 0; // Allows querying the visibility of the center. - virtual bool IsMessageCenterVisible() = 0; + virtual bool IsMessageCenterVisible() const = 0; // UI classes should call this when there is cause to leave popups visible for // longer than the default (for example, when the mouse hovers over a popup). @@ -166,7 +165,7 @@ class MESSAGE_CENTER_EXPORT MessageCenter { virtual void RestartPopupTimers() = 0; protected: - friend class ::TrayViewControllerTest; + friend class TrayViewControllerTest; friend class test::MessagePopupCollectionTest; virtual void DisableTimersForTest() = 0; diff --git a/ui/message_center/message_center_impl.cc b/ui/message_center/message_center_impl.cc index c707a2c8ce..45e91c48f9 100644 --- a/ui/message_center/message_center_impl.cc +++ b/ui/message_center/message_center_impl.cc @@ -391,6 +391,25 @@ void PopupTimersController::OnNotificationRemoved(const std::string& id, } // namespace internal //////////////////////////////////////////////////////////////////////////////// +// MessageCenterImpl::NotificationCache + +MessageCenterImpl::NotificationCache::NotificationCache() + : unread_count(0) {} + +MessageCenterImpl::NotificationCache::~NotificationCache() {} + +void MessageCenterImpl::NotificationCache::Rebuild( + const NotificationList::Notifications& notifications) { + visible_notifications = notifications; + unread_count = 0; + for (NotificationList::Notifications::const_iterator iter = + notifications.begin(); iter != notifications.end(); ++iter) { + if (!(*iter)->IsRead()) + ++unread_count; + } +} + +//////////////////////////////////////////////////////////////////////////////// // MessageCenterImpl MessageCenterImpl::MessageCenterImpl() @@ -430,7 +449,7 @@ void MessageCenterImpl::RemoveNotificationBlocker( blockers_.erase(iter); } -void MessageCenterImpl::OnBlockingStateChanged() { +void MessageCenterImpl::OnBlockingStateChanged(NotificationBlocker* blocker) { std::list<std::string> blocked_ids; NotificationList::PopupNotifications popups = notification_list_->GetPopupNotifications(blockers_, &blocked_ids); @@ -439,6 +458,11 @@ void MessageCenterImpl::OnBlockingStateChanged() { iter != blocked_ids.end(); ++iter) { MarkSinglePopupAsShown((*iter), true); } + notification_cache_.Rebuild( + notification_list_->GetVisibleNotifications(blockers_)); + FOR_EACH_OBSERVER(MessageCenterObserver, + observer_list_, + OnBlockingStateChanged(blocker)); } void MessageCenterImpl::SetVisibility(Visibility visibility) { @@ -461,23 +485,29 @@ void MessageCenterImpl::SetVisibility(Visibility visibility) { OnCenterVisibilityChanged(visibility)); } -bool MessageCenterImpl::IsMessageCenterVisible() { +bool MessageCenterImpl::IsMessageCenterVisible() const { return notification_list_->is_message_center_visible(); } size_t MessageCenterImpl::NotificationCount() const { - return notification_list_->NotificationCount(); + return notification_cache_.visible_notifications.size(); } size_t MessageCenterImpl::UnreadNotificationCount() const { - return notification_list_->unread_count(); + return notification_cache_.unread_count; } bool MessageCenterImpl::HasPopupNotifications() const { - return notification_list_->HasPopupNotifications(blockers_); + return !IsMessageCenterVisible() && + notification_list_->HasPopupNotifications(blockers_); } bool MessageCenterImpl::HasNotification(const std::string& id) { + // This will return true if the notification with |id| is hidden by the + // ChromeOS multi-profile feature. This would be harmless for now because + // this check will be used from the UI, so the |id| for hidden profile won't + // arrive here. + // TODO(mukai): fix this if necessary. return notification_list_->HasNotification(id); } @@ -493,7 +523,7 @@ bool MessageCenterImpl::HasClickedListener(const std::string& id) { const NotificationList::Notifications& MessageCenterImpl::GetVisibleNotifications() { - return notification_list_->GetNotifications(); + return notification_cache_.visible_notifications; } NotificationList::PopupNotifications @@ -520,6 +550,8 @@ void MessageCenterImpl::AddNotification(scoped_ptr<Notification> notification) { const std::string& id = notification->id(); bool already_exists = notification_list_->HasNotification(id); notification_list_->AddNotification(notification.Pass()); + notification_cache_.Rebuild( + notification_list_->GetVisibleNotifications(blockers_)); if (already_exists) { FOR_EACH_OBSERVER( @@ -562,6 +594,8 @@ void MessageCenterImpl::UpdateNotification( std::string new_id = new_notification->id(); notification_list_->UpdateNotificationMessage(old_id, new_notification.Pass()); + notification_cache_.Rebuild( + notification_list_->GetVisibleNotifications(blockers_)); if (old_id == new_id) { FOR_EACH_OBSERVER( MessageCenterObserver, observer_list_, OnNotificationUpdated(new_id)); @@ -593,14 +627,28 @@ void MessageCenterImpl::RemoveNotification(const std::string& id, // copies the id explicitly here. std::string copied_id(id); notification_list_->RemoveNotification(copied_id); + notification_cache_.Rebuild( + notification_list_->GetVisibleNotifications(blockers_)); FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, OnNotificationRemoved(copied_id, by_user)); } void MessageCenterImpl::RemoveAllNotifications(bool by_user) { - const NotificationList::Notifications& notifications = - notification_list_->GetNotifications(); + // Using not |blockers_| but an empty list since it wants to remove literally + // all notifications. + RemoveNotifications(by_user, NotificationBlockers()); +} + +void MessageCenterImpl::RemoveAllVisibleNotifications(bool by_user) { + RemoveNotifications(by_user, blockers_); +} + +void MessageCenterImpl::RemoveNotifications( + bool by_user, + const NotificationBlockers& blockers) { + const NotificationList::Notifications notifications = + notification_list_->GetVisibleNotifications(blockers); std::set<std::string> ids; for (NotificationList::Notifications::const_iterator iter = notifications.begin(); iter != notifications.end(); ++iter) { @@ -608,9 +656,13 @@ void MessageCenterImpl::RemoveAllNotifications(bool by_user) { NotificationDelegate* delegate = (*iter)->delegate(); if (delegate) delegate->Close(by_user); + notification_list_->RemoveNotification((*iter)->id()); } - notification_list_->RemoveAllNotifications(); + if (!ids.empty()) { + notification_cache_.Rebuild( + notification_list_->GetVisibleNotifications(blockers_)); + } for (std::set<std::string>::const_iterator iter = ids.begin(); iter != ids.end(); ++iter) { FOR_EACH_OBSERVER(MessageCenterObserver, @@ -694,6 +746,10 @@ void MessageCenterImpl::DisableNotificationsByNotifier( iter++; RemoveNotification(id, false); } + if (!notifications.empty()) { + notification_cache_.Rebuild( + notification_list_->GetVisibleNotifications(blockers_)); + } } void MessageCenterImpl::ExpandNotification(const std::string& id) { diff --git a/ui/message_center/message_center_impl.h b/ui/message_center/message_center_impl.h index 6d19b904a2..3768d96165 100644 --- a/ui/message_center/message_center_impl.h +++ b/ui/message_center/message_center_impl.h @@ -146,7 +146,7 @@ class MessageCenterImpl : public MessageCenter, virtual void AddNotificationBlocker(NotificationBlocker* blocker) OVERRIDE; virtual void RemoveNotificationBlocker(NotificationBlocker* blocker) OVERRIDE; virtual void SetVisibility(Visibility visible) OVERRIDE; - virtual bool IsMessageCenterVisible() OVERRIDE; + virtual bool IsMessageCenterVisible() const OVERRIDE; virtual size_t NotificationCount() const OVERRIDE; virtual size_t UnreadNotificationCount() const OVERRIDE; virtual bool HasPopupNotifications() const OVERRIDE; @@ -162,6 +162,7 @@ class MessageCenterImpl : public MessageCenter, OVERRIDE; virtual void RemoveNotification(const std::string& id, bool by_user) OVERRIDE; virtual void RemoveAllNotifications(bool by_user) OVERRIDE; + virtual void RemoveAllVisibleNotifications(bool by_user) OVERRIDE; virtual void SetNotificationIcon(const std::string& notification_id, const gfx::Image& image) OVERRIDE; virtual void SetNotificationImage(const std::string& notification_id, @@ -188,13 +189,25 @@ class MessageCenterImpl : public MessageCenter, virtual void PausePopupTimers() OVERRIDE; // NotificationBlocker::Observer overrides: - virtual void OnBlockingStateChanged() OVERRIDE; + virtual void OnBlockingStateChanged(NotificationBlocker* blocker) OVERRIDE; protected: virtual void DisableTimersForTest() OVERRIDE; private: + struct NotificationCache { + NotificationCache(); + ~NotificationCache(); + void Rebuild(const NotificationList::Notifications& notificaitons); + + NotificationList::Notifications visible_notifications; + size_t unread_count; + }; + + void RemoveNotifications(bool by_user, const NotificationBlockers& blockers); + scoped_ptr<NotificationList> notification_list_; + NotificationCache notification_cache_; ObserverList<MessageCenterObserver> observer_list_; scoped_ptr<internal::PopupTimersController> popup_timers_controller_; scoped_ptr<base::OneShotTimer<MessageCenterImpl> > quiet_mode_timer_; diff --git a/ui/message_center/message_center_impl_unittest.cc b/ui/message_center/message_center_impl_unittest.cc index e54f14b88d..64b29095a6 100644 --- a/ui/message_center/message_center_impl_unittest.cc +++ b/ui/message_center/message_center_impl_unittest.cc @@ -83,8 +83,7 @@ class ToggledNotificationBlocker : public NotificationBlocker { void SetNotificationsEnabled(bool enabled) { if (notifications_enabled_ != enabled) { notifications_enabled_ = enabled; - FOR_EACH_OBSERVER( - NotificationBlocker::Observer, observers(), OnBlockingStateChanged()); + NotifyBlockingStateChanged(); } } @@ -121,6 +120,23 @@ class PopupNotificationBlocker : public ToggledNotificationBlocker { DISALLOW_COPY_AND_ASSIGN(PopupNotificationBlocker); }; +class TotalNotificationBlocker : public PopupNotificationBlocker { + public: + TotalNotificationBlocker(MessageCenter* message_center, + const NotifierId& allowed_notifier) + : PopupNotificationBlocker(message_center, allowed_notifier) {} + virtual ~TotalNotificationBlocker() {} + + // NotificationBlocker overrides: + virtual bool ShouldShowNotification( + const NotifierId& notifier_id) const OVERRIDE { + return ShouldShowNotificationAsPopup(notifier_id); + } + + private: + DISALLOW_COPY_AND_ASSIGN(TotalNotificationBlocker); +}; + bool PopupNotificationsContain( const NotificationList::PopupNotifications& popups, const std::string& id) { @@ -132,6 +148,18 @@ bool PopupNotificationsContain( return false; } +// Right now, MessageCenter::HasNotification() returns regardless of blockers. +bool NotificationsContain( + const NotificationList::Notifications& notifications, + const std::string& id) { + for (NotificationList::Notifications::const_iterator iter = + notifications.begin(); iter != notifications.end(); ++iter) { + if ((*iter)->id() == id) + return true; + } + return false; +} + } // namespace namespace internal { @@ -459,6 +487,96 @@ TEST_F(MessageCenterImplTest, NotificationBlockerAllowsPopups) { EXPECT_EQ(4u, message_center()->GetVisibleNotifications().size()); } +// TotalNotificationBlocker suppresses showing notifications even from the list. +// This would provide the feature to 'separated' message centers per-profile for +// ChromeOS multi-login. +TEST_F(MessageCenterImplTest, TotalNotificationBlocker) { + NotifierId notifier_id1(NotifierId::APPLICATION, "app1"); + NotifierId notifier_id2(NotifierId::APPLICATION, "app2"); + TotalNotificationBlocker blocker(message_center(), notifier_id2); + + message_center()->AddNotification(scoped_ptr<Notification>(new Notification( + NOTIFICATION_TYPE_SIMPLE, + "id1", + UTF8ToUTF16("title"), + UTF8ToUTF16("message"), + gfx::Image() /* icon */, + base::string16() /* display_source */, + notifier_id1, + RichNotificationData(), + NULL))); + message_center()->AddNotification(scoped_ptr<Notification>(new Notification( + NOTIFICATION_TYPE_SIMPLE, + "id2", + UTF8ToUTF16("title"), + UTF8ToUTF16("message"), + gfx::Image() /* icon */, + base::string16() /* display_source */, + notifier_id2, + RichNotificationData(), + NULL))); + + // "id1" becomes invisible while "id2" is still visible. + blocker.SetNotificationsEnabled(false); + EXPECT_EQ(1u, message_center()->NotificationCount()); + NotificationList::Notifications notifications = + message_center()->GetVisibleNotifications(); + EXPECT_FALSE(NotificationsContain(notifications, "id1")); + EXPECT_TRUE(NotificationsContain(notifications, "id2")); + + message_center()->AddNotification(scoped_ptr<Notification>(new Notification( + NOTIFICATION_TYPE_SIMPLE, + "id3", + UTF8ToUTF16("title"), + UTF8ToUTF16("message"), + gfx::Image() /* icon */, + base::string16() /* display_source */, + notifier_id1, + RichNotificationData(), + NULL))); + message_center()->AddNotification(scoped_ptr<Notification>(new Notification( + NOTIFICATION_TYPE_SIMPLE, + "id4", + UTF8ToUTF16("title"), + UTF8ToUTF16("message"), + gfx::Image() /* icon */, + base::string16() /* display_source */, + notifier_id2, + RichNotificationData(), + NULL))); + EXPECT_EQ(2u, message_center()->NotificationCount()); + notifications = message_center()->GetVisibleNotifications(); + EXPECT_FALSE(NotificationsContain(notifications, "id1")); + EXPECT_TRUE(NotificationsContain(notifications, "id2")); + EXPECT_FALSE(NotificationsContain(notifications, "id3")); + EXPECT_TRUE(NotificationsContain(notifications, "id4")); + + blocker.SetNotificationsEnabled(true); + EXPECT_EQ(4u, message_center()->NotificationCount()); + notifications = message_center()->GetVisibleNotifications(); + EXPECT_TRUE(NotificationsContain(notifications, "id1")); + EXPECT_TRUE(NotificationsContain(notifications, "id2")); + EXPECT_TRUE(NotificationsContain(notifications, "id3")); + EXPECT_TRUE(NotificationsContain(notifications, "id4")); + + // RemoveAllVisibleNotifications should remove just visible notifications. + blocker.SetNotificationsEnabled(false); + message_center()->RemoveAllVisibleNotifications(false /* by_user */); + EXPECT_EQ(0u, message_center()->NotificationCount()); + blocker.SetNotificationsEnabled(true); + EXPECT_EQ(2u, message_center()->NotificationCount()); + notifications = message_center()->GetVisibleNotifications(); + EXPECT_TRUE(NotificationsContain(notifications, "id1")); + EXPECT_FALSE(NotificationsContain(notifications, "id2")); + EXPECT_TRUE(NotificationsContain(notifications, "id3")); + EXPECT_FALSE(NotificationsContain(notifications, "id4")); + + // And RemoveAllNotifications should remove all. + blocker.SetNotificationsEnabled(false); + message_center()->RemoveAllNotifications(false /* by_user */); + EXPECT_EQ(0u, message_center()->NotificationCount()); +} + TEST_F(MessageCenterImplTest, QueueUpdatesWithCenterVisible) { std::string id("id1"); std::string id2("id2"); diff --git a/ui/message_center/message_center_observer.h b/ui/message_center/message_center_observer.h index b300db5712..901b60e54a 100644 --- a/ui/message_center/message_center_observer.h +++ b/ui/message_center/message_center_observer.h @@ -11,6 +11,7 @@ #include "ui/message_center/message_center_types.h" namespace message_center { +class NotificationBlocker; // An observer class for the change of notifications in the MessageCenter. class MESSAGE_CENTER_EXPORT MessageCenterObserver { @@ -49,6 +50,9 @@ class MESSAGE_CENTER_EXPORT MessageCenterObserver { // Called whenever the quiet mode changes as a result of user action or when // quiet mode expires. virtual void OnQuietModeChanged(bool in_quiet_mode) {} + + // Called when the blocking state of |blocker| is changed. + virtual void OnBlockingStateChanged(NotificationBlocker* blocker) {} }; } // namespace message_center diff --git a/ui/message_center/message_center_tray.cc b/ui/message_center/message_center_tray.cc index 9a5ea56dfb..58e5868a1e 100644 --- a/ui/message_center/message_center_tray.cc +++ b/ui/message_center/message_center_tray.cc @@ -11,6 +11,7 @@ #include "ui/message_center/message_center.h" #include "ui/message_center/message_center_tray_delegate.h" #include "ui/message_center/message_center_types.h" +#include "ui/message_center/notification_blocker.h" namespace message_center { @@ -52,6 +53,7 @@ void MessageCenterTray::MarkMessageCenterHidden() { if (!message_center_visible_) return; message_center_visible_ = false; + message_center_->SetVisibility(message_center::VISIBILITY_TRANSIENT); // Some notifications (like system ones) should appear as popups again // after the message center is closed. @@ -60,8 +62,6 @@ void MessageCenterTray::MarkMessageCenterHidden() { return; } - message_center_->SetVisibility(message_center::VISIBILITY_TRANSIENT); - NotifyMessageCenterTrayChanged(); } @@ -102,11 +102,8 @@ void MessageCenterTray::HidePopupBubbleInternal() { if (!popups_visible_) return; - // This is called before HidePopups so that we don't double-call this when we - // see the results of HidePopups via MessageCenterObserver. - popups_visible_ = false; - delegate_->HidePopups(); + popups_visible_ = false; } void MessageCenterTray::ShowNotifierSettingsBubble() { @@ -157,6 +154,10 @@ void MessageCenterTray::OnQuietModeChanged(bool in_quiet_mode) { NotifyMessageCenterTrayChanged(); } +void MessageCenterTray::OnBlockingStateChanged(NotificationBlocker* blocker) { + OnMessageCenterChanged(); +} + void MessageCenterTray::OnMessageCenterChanged() { if (message_center_visible_ && message_center_->NotificationCount() == 0) HideMessageCenterBubble(); diff --git a/ui/message_center/message_center_tray.h b/ui/message_center/message_center_tray.h index 444bb2f4ec..fed4eb1433 100644 --- a/ui/message_center/message_center_tray.h +++ b/ui/message_center/message_center_tray.h @@ -76,6 +76,7 @@ class MESSAGE_CENTER_EXPORT MessageCenterTray : public MessageCenterObserver { virtual void OnNotificationDisplayed( const std::string& notification_id) OVERRIDE; virtual void OnQuietModeChanged(bool in_quiet_mode) OVERRIDE; + virtual void OnBlockingStateChanged(NotificationBlocker* blocker) OVERRIDE; private: void OnMessageCenterChanged(); diff --git a/ui/message_center/message_center_tray_unittest.cc b/ui/message_center/message_center_tray_unittest.cc index 6a68b2b989..f9f10e1807 100644 --- a/ui/message_center/message_center_tray_unittest.cc +++ b/ui/message_center/message_center_tray_unittest.cc @@ -42,6 +42,8 @@ class MockDelegate : public MessageCenterTrayDelegate { DISALLOW_COPY_AND_ASSIGN(MockDelegate); }; +} // namespace + class MessageCenterTrayTest : public testing::Test { public: MessageCenterTrayTest() {} @@ -63,6 +65,10 @@ class MessageCenterTrayTest : public testing::Test { } protected: + NotifierId DummyNotifierId() { + return NotifierId(); + } + void AddNotification(const std::string& id) { scoped_ptr<Notification> notification( new Notification(message_center::NOTIFICATION_TYPE_SIMPLE, @@ -71,7 +77,7 @@ class MessageCenterTrayTest : public testing::Test { ASCIIToUTF16("Notification message body."), gfx::Image(), ASCIIToUTF16("www.test.org"), - NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL /* delegate */)); message_center_->AddNotification(notification.Pass()); @@ -84,8 +90,6 @@ class MessageCenterTrayTest : public testing::Test { DISALLOW_COPY_AND_ASSIGN(MessageCenterTrayTest); }; -} // namespace - TEST_F(MessageCenterTrayTest, BasicMessageCenter) { ASSERT_FALSE(message_center_tray_->popups_visible()); ASSERT_FALSE(message_center_tray_->message_center_visible()); @@ -178,7 +182,7 @@ TEST_F(MessageCenterTrayTest, MessageCenterReopenPopupsForSystemPriority) { ASCIIToUTF16("Notification message body."), gfx::Image(), ASCIIToUTF16("www.test.org"), - NotifierId(), + DummyNotifierId(), message_center::RichNotificationData(), NULL /* delegate */)); notification->SetSystemPriority(); diff --git a/ui/message_center/notification.cc b/ui/message_center/notification.cc index c7b2f980c5..5e0f1b6d7c 100644 --- a/ui/message_center/notification.cc +++ b/ui/message_center/notification.cc @@ -106,9 +106,13 @@ Notification& Notification::operator=(const Notification& other) { Notification::~Notification() {} +bool Notification::IsRead() const { + return is_read_ || optional_fields_.priority == MIN_PRIORITY; +} + void Notification::CopyState(Notification* base) { shown_as_popup_ = base->shown_as_popup(); - is_read_ = base->is_read(); + is_read_ = base->is_read_; is_expanded_ = base->is_expanded(); if (!delegate_.get()) delegate_ = base->delegate(); @@ -132,7 +136,7 @@ scoped_ptr<Notification> Notification::CreateSystemNotification( const base::string16& title, const base::string16& message, const gfx::Image& icon, - int system_component_id, + const std::string& system_component_id, const base::Closure& click_callback) { scoped_ptr<Notification> notification( new Notification( @@ -142,7 +146,7 @@ scoped_ptr<Notification> Notification::CreateSystemNotification( message, icon, base::string16() /* display_source */, - NotifierId(system_component_id), + NotifierId(NotifierId::SYSTEM_COMPONENT, system_component_id), RichNotificationData(), new HandleNotificationClickedDelegate(click_callback))); notification->SetSystemPriority(); diff --git a/ui/message_center/notification.h b/ui/message_center/notification.h index 004808e8d8..ff6f7d1a14 100644 --- a/ui/message_center/notification.h +++ b/ui/message_center/notification.h @@ -88,6 +88,10 @@ class MESSAGE_CENTER_EXPORT Notification { const NotifierId& notifier_id() const { return notifier_id_; } + void set_profile_id(const std::string& profile_id) { + notifier_id_.profile_id = profile_id; + } + // Begin unpacked values from optional_fields. int priority() const { return optional_fields_.priority; } void set_priority(int priority) { optional_fields_.priority = priority; } @@ -144,7 +148,7 @@ class MESSAGE_CENTER_EXPORT Notification { } // Read status in the message center. - bool is_read() const { return is_read_; } + bool IsRead() const; void set_is_read(bool read) { is_read_ = read; } // Expanded status in the message center (not the popups). @@ -186,14 +190,14 @@ class MESSAGE_CENTER_EXPORT Notification { void ButtonClick(int index) const { delegate()->ButtonClick(index); } void Close(bool by_user) const { delegate()->Close(by_user); } - // Helper method to create a simple System notification. |click_callback| + // Helper method to create a simple system notification. |click_callback| // will be invoked when the notification is clicked. static scoped_ptr<Notification> CreateSystemNotification( const std::string& notification_id, const base::string16& title, const base::string16& message, const gfx::Image& icon, - int system_component_id, + const std::string& system_component_id, const base::Closure& click_callback); protected: diff --git a/ui/message_center/notification_blocker.cc b/ui/message_center/notification_blocker.cc index 6d6c5d3ce1..0b7d7203c5 100644 --- a/ui/message_center/notification_blocker.cc +++ b/ui/message_center/notification_blocker.cc @@ -28,4 +28,14 @@ void NotificationBlocker::RemoveObserver( observers_.RemoveObserver(observer); } +bool NotificationBlocker::ShouldShowNotification( + const NotifierId& notifier_id) const { + return true; +} + +void NotificationBlocker::NotifyBlockingStateChanged() { + FOR_EACH_OBSERVER( + NotificationBlocker::Observer, observers_, OnBlockingStateChanged(this)); +} + } // namespace message_center diff --git a/ui/message_center/notification_blocker.h b/ui/message_center/notification_blocker.h index 437f0eb123..385b9856c7 100644 --- a/ui/message_center/notification_blocker.h +++ b/ui/message_center/notification_blocker.h @@ -7,7 +7,7 @@ #include "base/observer_list.h" #include "ui/message_center/message_center_export.h" -#include "ui/message_center/notifier_settings.h" +#include "ui/message_center/notification.h" namespace message_center { class MessageCenter; @@ -19,7 +19,7 @@ class MESSAGE_CENTER_EXPORT NotificationBlocker { public: class Observer { public: - virtual void OnBlockingStateChanged() = 0; + virtual void OnBlockingStateChanged(NotificationBlocker* blocker) = 0; }; explicit NotificationBlocker(MessageCenter* message_center); @@ -31,6 +31,10 @@ class MESSAGE_CENTER_EXPORT NotificationBlocker { // Checks the current state and updates the availability. virtual void CheckState() {} + // Returns true when notifications from |notifier_id| should appear in the + // message center. Default returns true always. + virtual bool ShouldShowNotification(const NotifierId& notifier_id) const; + // Returns true when notifications from |notifier_id| should be shown as // popups on screen. If it's false, those notifications should be queued. // When a blocker starts returning false for a notification which is already @@ -39,13 +43,16 @@ class MESSAGE_CENTER_EXPORT NotificationBlocker { const NotifierId& notifier_id) const = 0; protected: - ObserverList<Observer>& observers() { return observers_; } + MessageCenter* message_center() { return message_center_; } + void NotifyBlockingStateChanged(); private: ObserverList<Observer> observers_; MessageCenter* message_center_; // weak }; +typedef std::vector<NotificationBlocker*> NotificationBlockers; + } // namespace message_center #endif // UI_MESSAGE_CENTER_NOTIFICATION_BLOCKER_H_ diff --git a/ui/message_center/notification_list.cc b/ui/message_center/notification_list.cc index a13f270fbc..3ec0bfe296 100644 --- a/ui/message_center/notification_list.cc +++ b/ui/message_center/notification_list.cc @@ -11,7 +11,6 @@ #include "base/values.h" #include "ui/message_center/message_center_style.h" #include "ui/message_center/notification.h" -#include "ui/message_center/notification_blocker.h" #include "ui/message_center/notification_types.h" namespace message_center { @@ -19,10 +18,10 @@ namespace message_center { namespace { bool ShouldShowNotificationAsPopup( - const NotifierId& notifier_id, - const std::vector<NotificationBlocker*>& blockers) { + const Notification& notification, + const NotificationBlockers& blockers) { for (size_t i = 0; i < blockers.size(); ++i) { - if (!blockers[i]->ShouldShowNotificationAsPopup(notifier_id)) + if (!blockers[i]->ShouldShowNotificationAsPopup(notification.notifier_id())) return false; } return true; @@ -53,7 +52,6 @@ bool CompareTimestampSerial::operator()(Notification* n1, Notification* n2) { NotificationList::NotificationList() : message_center_visible_(false), - unread_count_(0), quiet_mode_(false) { } @@ -72,18 +70,16 @@ void NotificationList::SetMessageCenterVisible( if (!visible) return; - unread_count_ = 0; - for (Notifications::iterator iter = notifications_.begin(); iter != notifications_.end(); ++iter) { Notification* notification = *iter; + bool was_popup = notification->shown_as_popup(); + bool was_read = notification->IsRead(); if (notification->priority() < SYSTEM_PRIORITY) notification->set_shown_as_popup(true); notification->set_is_read(true); - if (updated_ids && - !(notification->shown_as_popup() && notification->is_read())) { + if (updated_ids && !(was_popup && was_read)) updated_ids->insert(notification->id()); - } } } @@ -123,15 +119,6 @@ void NotificationList::RemoveNotification(const std::string& id) { EraseNotification(GetNotification(id)); } -void NotificationList::RemoveAllNotifications() { - for (Notifications::iterator loopiter = notifications_.begin(); - loopiter != notifications_.end(); ) { - Notifications::iterator curiter = loopiter++; - EraseNotification(curiter); - } - unread_count_ = 0; -} - NotificationList::Notifications NotificationList::GetNotificationsByNotifierId( const NotifierId& notifier_id) { Notifications notifications; @@ -185,12 +172,12 @@ bool NotificationList::HasNotificationOfType(const std::string& id, } bool NotificationList::HasPopupNotifications( - const std::vector<NotificationBlocker*>& blockers) { + const NotificationBlockers& blockers) { for (Notifications::iterator iter = notifications_.begin(); iter != notifications_.end(); ++iter) { if ((*iter)->priority() < DEFAULT_PRIORITY) break; - if (!ShouldShowNotificationAsPopup((*iter)->notifier_id(), blockers)) + if (!ShouldShowNotificationAsPopup(**iter, blockers)) continue; if (!(*iter)->shown_as_popup()) return true; @@ -199,7 +186,7 @@ bool NotificationList::HasPopupNotifications( } NotificationList::PopupNotifications NotificationList::GetPopupNotifications( - const std::vector<NotificationBlocker*>& blockers, + const NotificationBlockers& blockers, std::list<std::string>* blocked_ids) { PopupNotifications result; size_t default_priority_popup_count = 0; @@ -214,7 +201,7 @@ NotificationList::PopupNotifications NotificationList::GetPopupNotifications( if ((*iter)->priority() < DEFAULT_PRIORITY) continue; - if (!ShouldShowNotificationAsPopup((*iter)->notifier_id(), blockers)) { + if (!ShouldShowNotificationAsPopup(**iter, blockers)) { if (blocked_ids) blocked_ids->push_back((*iter)->id()); continue; @@ -247,10 +234,8 @@ void NotificationList::MarkSinglePopupAsShown( // The popup notification is already marked as read when it's displayed. // Set the is_read() back to false if necessary. - if (!mark_notification_as_read) { + if (!mark_notification_as_read) (*iter)->set_is_read(false); - ++unread_count_; - } } void NotificationList::MarkSinglePopupAsDisplayed(const std::string& id) { @@ -261,10 +246,8 @@ void NotificationList::MarkSinglePopupAsDisplayed(const std::string& id) { if ((*iter)->shown_as_popup()) return; - if (!(*iter)->is_read()) { + if (!(*iter)->IsRead()) (*iter)->set_is_read(true); - --unread_count_; - } } void NotificationList::MarkNotificationAsExpanded(const std::string& id) { @@ -292,12 +275,40 @@ void NotificationList::SetQuietMode(bool quiet_mode) { } } -const NotificationList::Notifications& NotificationList::GetNotifications() { - return notifications_; +NotificationList::Notifications NotificationList::GetVisibleNotifications( + const NotificationBlockers& blockers) const { + Notifications result; + for (Notifications::const_iterator iter = notifications_.begin(); + iter != notifications_.end(); ++iter) { + bool should_show = true; + for (size_t i = 0; i < blockers.size(); ++i) { + if (!blockers[i]->ShouldShowNotification((*iter)->notifier_id())) { + should_show = false; + break; + } + } + if (should_show) + result.insert(*iter); + } + + return result; } -size_t NotificationList::NotificationCount() const { - return notifications_.size(); +size_t NotificationList::NotificationCount( + const NotificationBlockers& blockers) const { + return GetVisibleNotifications(blockers).size(); +} + +size_t NotificationList::UnreadCount( + const NotificationBlockers& blockers) const { + Notifications notifications = GetVisibleNotifications(blockers); + size_t unread_count = 0; + for (Notifications::const_iterator iter = notifications.begin(); + iter != notifications.end(); ++iter) { + if (!(*iter)->IsRead()) + ++unread_count; + } + return unread_count; } NotificationList::Notifications::iterator NotificationList::GetNotification( @@ -311,8 +322,6 @@ NotificationList::Notifications::iterator NotificationList::GetNotification( } void NotificationList::EraseNotification(Notifications::iterator iter) { - if (!(*iter)->is_read() && (*iter)->priority() > MIN_PRIORITY) - --unread_count_; delete *iter; notifications_.erase(iter); } @@ -326,10 +335,6 @@ void NotificationList::PushNotification(scoped_ptr<Notification> notification) { notification->CopyState(*iter); state_inherited = true; EraseNotification(iter); - // if |iter| is unread, EraseNotification decrements |unread_count_| but - // actually the count is unchanged since |notification| will be added. - if (!notification->is_read()) - ++unread_count_; } // Add the notification to the the list and mark it unread and unshown. if (!state_inherited) { @@ -339,8 +344,6 @@ void NotificationList::PushNotification(scoped_ptr<Notification> notification) { notification->set_shown_as_popup(message_center_visible_ || quiet_mode_ || notification->shown_as_popup()); - if (notification->priority() > MIN_PRIORITY) - ++unread_count_; } // Take ownership. The notification can only be removed from the list // in EraseNotification(), which will delete it. diff --git a/ui/message_center/notification_list.h b/ui/message_center/notification_list.h index 3feee7eee3..3ea8112eb3 100644 --- a/ui/message_center/notification_list.h +++ b/ui/message_center/notification_list.h @@ -16,6 +16,7 @@ #include "ui/gfx/native_widget_types.h" #include "ui/message_center/message_center_export.h" #include "ui/message_center/notification.h" +#include "ui/message_center/notification_blocker.h" #include "ui/message_center/notification_types.h" namespace base { @@ -24,7 +25,6 @@ class DictionaryValue; namespace message_center { -class NotificationBlocker; class NotificationDelegate; namespace test { @@ -67,8 +67,6 @@ class MESSAGE_CENTER_EXPORT NotificationList { void RemoveNotification(const std::string& id); - void RemoveAllNotifications(); - Notifications GetNotificationsByNotifierId(const NotifierId& notifier_id); // Returns true if the notification exists and was updated. @@ -94,7 +92,7 @@ class MESSAGE_CENTER_EXPORT NotificationList { // Returns false if the first notification has been shown as a popup (which // means that all notifications have been shown). - bool HasPopupNotifications(const std::vector<NotificationBlocker*>& blockers); + bool HasPopupNotifications(const NotificationBlockers& blockers); // Returns the recent notifications of the priority higher then LOW, // that have not been shown as a popup. kMaxVisiblePopupNotifications are @@ -103,7 +101,7 @@ class MESSAGE_CENTER_EXPORT NotificationList { // to |blocked_ids|. |blocked_ids| can be NULL if the caller doesn't care // which notifications are blocked. PopupNotifications GetPopupNotifications( - const std::vector<NotificationBlocker*>& blockers, + const NotificationBlockers& blockers, std::list<std::string>* blocked_ids); // Marks a specific popup item as shown. Set |mark_notification_as_read| to @@ -128,11 +126,13 @@ class MESSAGE_CENTER_EXPORT NotificationList { // specified time-delta from now. void EnterQuietModeWithExpire(const base::TimeDelta& expires_in); - // Returns all notifications, in a (priority-timestamp) order. Suitable for - // rendering notifications in a NotificationCenter. - const Notifications& GetNotifications(); - size_t NotificationCount() const; - size_t unread_count() const { return unread_count_; } + // Returns all visible notifications, in a (priority-timestamp) order. + // Suitable for rendering notifications in a MessageCenter. + Notifications GetVisibleNotifications( + const NotificationBlockers& blockers) const; + size_t NotificationCount(const NotificationBlockers& blockers) const; + size_t UnreadCount(const NotificationBlockers& blockers) const; + bool is_message_center_visible() const { return message_center_visible_; } private: @@ -149,7 +149,6 @@ class MESSAGE_CENTER_EXPORT NotificationList { Notifications notifications_; bool message_center_visible_; - size_t unread_count_; bool quiet_mode_; DISALLOW_COPY_AND_ASSIGN(NotificationList); diff --git a/ui/message_center/notification_list_unittest.cc b/ui/message_center/notification_list_unittest.cc index 18d72379a1..10c843fa9a 100644 --- a/ui/message_center/notification_list_unittest.cc +++ b/ui/message_center/notification_list_unittest.cc @@ -75,8 +75,7 @@ class NotificationListTest : public testing::Test { } NotificationList::PopupNotifications GetPopups() { - return notification_list()->GetPopupNotifications( - std::vector<NotificationBlocker*>(), NULL); + return notification_list()->GetPopupNotifications(blockers_, NULL); } size_t GetPopupCounts() { @@ -86,12 +85,13 @@ class NotificationListTest : public testing::Test { Notification* GetNotification(const std::string& id) { NotificationList::Notifications::iterator iter = notification_list()->GetNotification(id); - if (iter == notification_list()->GetNotifications().end()) + if (iter == notification_list()->notifications_.end()) return NULL; return *iter; } NotificationList* notification_list() { return notification_list_.get(); } + const NotificationBlockers& blockers() const { return blockers_; } static const char kIdFormat[]; static const char kTitleFormat[]; @@ -101,6 +101,7 @@ class NotificationListTest : public testing::Test { private: scoped_ptr<NotificationList> notification_list_; + NotificationBlockers blockers_; size_t counter_; DISALLOW_COPY_AND_ASSIGN(NotificationListTest); @@ -123,17 +124,16 @@ const char NotificationListTest::kDisplaySource[] = "source"; const char NotificationListTest::kExtensionId[] = "ext"; TEST_F(NotificationListTest, Basic) { - ASSERT_EQ(0u, notification_list()->NotificationCount()); - ASSERT_EQ(0u, notification_list()->unread_count()); + ASSERT_EQ(0u, notification_list()->NotificationCount(blockers())); + ASSERT_EQ(0u, notification_list()->UnreadCount(blockers())); std::string id0 = AddNotification(); - EXPECT_EQ(1u, notification_list()->NotificationCount()); + EXPECT_EQ(1u, notification_list()->NotificationCount(blockers())); std::string id1 = AddNotification(); - EXPECT_EQ(2u, notification_list()->NotificationCount()); - EXPECT_EQ(2u, notification_list()->unread_count()); + EXPECT_EQ(2u, notification_list()->NotificationCount(blockers())); + EXPECT_EQ(2u, notification_list()->UnreadCount(blockers())); - EXPECT_TRUE(notification_list()->HasPopupNotifications( - std::vector<NotificationBlocker*>())); + EXPECT_TRUE(notification_list()->HasPopupNotifications(blockers())); EXPECT_TRUE(notification_list()->HasNotification(id0)); EXPECT_TRUE(notification_list()->HasNotification(id1)); EXPECT_FALSE(notification_list()->HasNotification(id1 + "foo")); @@ -142,51 +142,47 @@ TEST_F(NotificationListTest, Basic) { notification_list()->MarkSinglePopupAsShown(id0, true); notification_list()->MarkSinglePopupAsShown(id1, true); - EXPECT_EQ(2u, notification_list()->NotificationCount()); + EXPECT_EQ(2u, notification_list()->NotificationCount(blockers())); EXPECT_EQ(0u, GetPopupCounts()); notification_list()->RemoveNotification(id0); - EXPECT_EQ(1u, notification_list()->NotificationCount()); - EXPECT_EQ(1u, notification_list()->unread_count()); + EXPECT_EQ(1u, notification_list()->NotificationCount(blockers())); + EXPECT_EQ(1u, notification_list()->UnreadCount(blockers())); AddNotification(); - EXPECT_EQ(2u, notification_list()->NotificationCount()); - - notification_list()->RemoveAllNotifications(); - EXPECT_EQ(0u, notification_list()->NotificationCount()); - EXPECT_EQ(0u, notification_list()->unread_count()); + EXPECT_EQ(2u, notification_list()->NotificationCount(blockers())); } TEST_F(NotificationListTest, MessageCenterVisible) { AddNotification(); - EXPECT_EQ(1u, notification_list()->NotificationCount()); - ASSERT_EQ(1u, notification_list()->unread_count()); + EXPECT_EQ(1u, notification_list()->NotificationCount(blockers())); + ASSERT_EQ(1u, notification_list()->UnreadCount(blockers())); ASSERT_EQ(1u, GetPopupCounts()); // Make the message center visible. It resets the unread count and popup // counts. notification_list()->SetMessageCenterVisible(true, NULL); - ASSERT_EQ(0u, notification_list()->unread_count()); + ASSERT_EQ(0u, notification_list()->UnreadCount(blockers())); ASSERT_EQ(0u, GetPopupCounts()); } TEST_F(NotificationListTest, UnreadCount) { std::string id0 = AddNotification(); std::string id1 = AddNotification(); - ASSERT_EQ(2u, notification_list()->unread_count()); + ASSERT_EQ(2u, notification_list()->UnreadCount(blockers())); notification_list()->MarkSinglePopupAsDisplayed(id0); - EXPECT_EQ(1u, notification_list()->unread_count()); + EXPECT_EQ(1u, notification_list()->UnreadCount(blockers())); notification_list()->MarkSinglePopupAsDisplayed(id0); - EXPECT_EQ(1u, notification_list()->unread_count()); + EXPECT_EQ(1u, notification_list()->UnreadCount(blockers())); notification_list()->MarkSinglePopupAsDisplayed(id1); - EXPECT_EQ(0u, notification_list()->unread_count()); + EXPECT_EQ(0u, notification_list()->UnreadCount(blockers())); } TEST_F(NotificationListTest, UpdateNotification) { std::string id0 = AddNotification(); std::string replaced = id0 + "_replaced"; - EXPECT_EQ(1u, notification_list()->NotificationCount()); + EXPECT_EQ(1u, notification_list()->NotificationCount(blockers())); scoped_ptr<Notification> notification( new Notification(message_center::NOTIFICATION_TYPE_SIMPLE, replaced, @@ -198,9 +194,9 @@ TEST_F(NotificationListTest, UpdateNotification) { message_center::RichNotificationData(), NULL)); notification_list()->UpdateNotificationMessage(id0, notification.Pass()); - EXPECT_EQ(1u, notification_list()->NotificationCount()); - const NotificationList::Notifications& notifications = - notification_list()->GetNotifications(); + EXPECT_EQ(1u, notification_list()->NotificationCount(blockers())); + const NotificationList::Notifications notifications = + notification_list()->GetVisibleNotifications(blockers()); EXPECT_EQ(replaced, (*notifications.begin())->id()); EXPECT_EQ(UTF8ToUTF16("newtitle"), (*notifications.begin())->title()); EXPECT_EQ(UTF8ToUTF16("newbody"), (*notifications.begin())->message()); @@ -210,7 +206,7 @@ TEST_F(NotificationListTest, GetNotificationsByNotifierId) { NotifierId id0(NotifierId::APPLICATION, "ext0"); NotifierId id1(NotifierId::APPLICATION, "ext1"); NotifierId id2(GURL("http://example.com")); - NotifierId id3(0); + NotifierId id3(NotifierId::SYSTEM_COMPONENT, "system-notifier"); scoped_ptr<Notification> notification( new Notification(message_center::NOTIFICATION_TYPE_SIMPLE, "id0", @@ -334,34 +330,39 @@ TEST_F(NotificationListTest, OldPopupShouldNotBeHidden) { } TEST_F(NotificationListTest, Priority) { - ASSERT_EQ(0u, notification_list()->NotificationCount()); - ASSERT_EQ(0u, notification_list()->unread_count()); + ASSERT_EQ(0u, notification_list()->NotificationCount(blockers())); + ASSERT_EQ(0u, notification_list()->UnreadCount(blockers())); // Default priority has the limit on the number of the popups. for (size_t i = 0; i <= kMaxVisiblePopupNotifications; ++i) AddNotification(); EXPECT_EQ(kMaxVisiblePopupNotifications + 1, - notification_list()->NotificationCount()); + notification_list()->NotificationCount(blockers())); EXPECT_EQ(kMaxVisiblePopupNotifications, GetPopupCounts()); // Low priority: not visible to popups. notification_list()->SetMessageCenterVisible(true, NULL); notification_list()->SetMessageCenterVisible(false, NULL); - EXPECT_EQ(0u, notification_list()->unread_count()); + EXPECT_EQ(0u, notification_list()->UnreadCount(blockers())); AddPriorityNotification(LOW_PRIORITY); EXPECT_EQ(kMaxVisiblePopupNotifications + 2, - notification_list()->NotificationCount()); - EXPECT_EQ(1u, notification_list()->unread_count()); + notification_list()->NotificationCount(blockers())); + EXPECT_EQ(1u, notification_list()->UnreadCount(blockers())); EXPECT_EQ(0u, GetPopupCounts()); // Minimum priority: doesn't update the unread count. AddPriorityNotification(MIN_PRIORITY); EXPECT_EQ(kMaxVisiblePopupNotifications + 3, - notification_list()->NotificationCount()); - EXPECT_EQ(1u, notification_list()->unread_count()); + notification_list()->NotificationCount(blockers())); + EXPECT_EQ(1u, notification_list()->UnreadCount(blockers())); EXPECT_EQ(0u, GetPopupCounts()); - notification_list()->RemoveAllNotifications(); + NotificationList::Notifications notifications = + notification_list()->GetVisibleNotifications(blockers()); + for (NotificationList::Notifications::const_iterator iter = + notifications.begin(); iter != notifications.end(); ++iter) { + notification_list()->RemoveNotification((*iter)->id()); + } // Higher priority: no limits to the number of popups. for (size_t i = 0; i < kMaxVisiblePopupNotifications * 2; ++i) @@ -369,13 +370,13 @@ TEST_F(NotificationListTest, Priority) { for (size_t i = 0; i < kMaxVisiblePopupNotifications * 2; ++i) AddPriorityNotification(MAX_PRIORITY); EXPECT_EQ(kMaxVisiblePopupNotifications * 4, - notification_list()->NotificationCount()); + notification_list()->NotificationCount(blockers())); EXPECT_EQ(kMaxVisiblePopupNotifications * 4, GetPopupCounts()); } TEST_F(NotificationListTest, HasPopupsWithPriority) { - ASSERT_EQ(0u, notification_list()->NotificationCount()); - ASSERT_EQ(0u, notification_list()->unread_count()); + ASSERT_EQ(0u, notification_list()->NotificationCount(blockers())); + ASSERT_EQ(0u, notification_list()->UnreadCount(blockers())); AddPriorityNotification(MIN_PRIORITY); AddPriorityNotification(MAX_PRIORITY); @@ -384,8 +385,8 @@ TEST_F(NotificationListTest, HasPopupsWithPriority) { } TEST_F(NotificationListTest, HasPopupsWithSystemPriority) { - ASSERT_EQ(0u, notification_list()->NotificationCount()); - ASSERT_EQ(0u, notification_list()->unread_count()); + ASSERT_EQ(0u, notification_list()->NotificationCount(blockers())); + ASSERT_EQ(0u, notification_list()->UnreadCount(blockers())); std::string normal_id = AddPriorityNotification(DEFAULT_PRIORITY); std::string system_id = AddNotification(); @@ -411,7 +412,7 @@ TEST_F(NotificationListTest, HasPopupsWithSystemPriority) { TEST_F(NotificationListTest, PriorityPromotion) { std::string id0 = AddPriorityNotification(LOW_PRIORITY); std::string replaced = id0 + "_replaced"; - EXPECT_EQ(1u, notification_list()->NotificationCount()); + EXPECT_EQ(1u, notification_list()->NotificationCount(blockers())); EXPECT_EQ(0u, GetPopupCounts()); message_center::RichNotificationData optional; optional.priority = 1; @@ -426,10 +427,10 @@ TEST_F(NotificationListTest, PriorityPromotion) { optional, NULL)); notification_list()->UpdateNotificationMessage(id0, notification.Pass()); - EXPECT_EQ(1u, notification_list()->NotificationCount()); + EXPECT_EQ(1u, notification_list()->NotificationCount(blockers())); EXPECT_EQ(1u, GetPopupCounts()); - const NotificationList::Notifications& notifications = - notification_list()->GetNotifications(); + const NotificationList::Notifications notifications = + notification_list()->GetVisibleNotifications(blockers()); EXPECT_EQ(replaced, (*notifications.begin())->id()); EXPECT_EQ(UTF8ToUTF16("newtitle"), (*notifications.begin())->title()); EXPECT_EQ(UTF8ToUTF16("newbody"), (*notifications.begin())->message()); @@ -555,8 +556,8 @@ TEST_F(NotificationListTest, NotificationOrderAndPriority) { } { // Notifications: high priority comes ealier. - const NotificationList::Notifications& notifications = - notification_list()->GetNotifications(); + const NotificationList::Notifications notifications = + notification_list()->GetVisibleNotifications(blockers()); EXPECT_EQ(3u, notifications.size()); NotificationList::Notifications::const_iterator iter = notifications.begin(); @@ -572,7 +573,7 @@ TEST_F(NotificationListTest, MarkSinglePopupAsShown) { std::string id1 = AddNotification(); std::string id2 = AddNotification(); std::string id3 = AddNotification(); - ASSERT_EQ(3u, notification_list()->NotificationCount()); + ASSERT_EQ(3u, notification_list()->NotificationCount(blockers())); ASSERT_EQ(std::min(static_cast<size_t>(3u), kMaxVisiblePopupNotifications), GetPopupCounts()); notification_list()->MarkSinglePopupAsDisplayed(id1); @@ -581,15 +582,15 @@ TEST_F(NotificationListTest, MarkSinglePopupAsShown) { notification_list()->MarkSinglePopupAsShown(id2, true); notification_list()->MarkSinglePopupAsShown(id3, false); - EXPECT_EQ(3u, notification_list()->NotificationCount()); - EXPECT_EQ(1u, notification_list()->unread_count()); + EXPECT_EQ(3u, notification_list()->NotificationCount(blockers())); + EXPECT_EQ(1u, notification_list()->UnreadCount(blockers())); EXPECT_EQ(1u, GetPopupCounts()); NotificationList::PopupNotifications popups = GetPopups(); EXPECT_EQ(id1, (*popups.begin())->id()); // The notifications in the NotificationCenter are unaffected by popups shown. NotificationList::Notifications notifications = - notification_list()->GetNotifications(); + notification_list()->GetVisibleNotifications(blockers()); NotificationList::Notifications::const_iterator iter = notifications.begin(); EXPECT_EQ(id3, (*iter)->id()); iter++; @@ -608,13 +609,13 @@ TEST_F(NotificationListTest, UpdateAfterMarkedAsShown) { const Notification* n1 = GetNotification(id1); EXPECT_FALSE(n1->shown_as_popup()); - EXPECT_TRUE(n1->is_read()); + EXPECT_TRUE(n1->IsRead()); notification_list()->MarkSinglePopupAsShown(id1, true); n1 = GetNotification(id1); EXPECT_TRUE(n1->shown_as_popup()); - EXPECT_TRUE(n1->is_read()); + EXPECT_TRUE(n1->IsRead()); const std::string replaced("test-replaced-id"); scoped_ptr<Notification> notification( @@ -632,7 +633,7 @@ TEST_F(NotificationListTest, UpdateAfterMarkedAsShown) { EXPECT_TRUE(n1 == NULL); const Notification* nr = GetNotification(replaced); EXPECT_TRUE(nr->shown_as_popup()); - EXPECT_TRUE(nr->is_read()); + EXPECT_TRUE(nr->IsRead()); } TEST_F(NotificationListTest, QuietMode) { @@ -640,12 +641,12 @@ TEST_F(NotificationListTest, QuietMode) { AddNotification(); AddPriorityNotification(HIGH_PRIORITY); AddPriorityNotification(MAX_PRIORITY); - EXPECT_EQ(3u, notification_list()->NotificationCount()); + EXPECT_EQ(3u, notification_list()->NotificationCount(blockers())); EXPECT_EQ(0u, GetPopupCounts()); notification_list()->SetQuietMode(false); AddNotification(); - EXPECT_EQ(4u, notification_list()->NotificationCount()); + EXPECT_EQ(4u, notification_list()->NotificationCount(blockers())); EXPECT_EQ(1u, GetPopupCounts()); // TODO(mukai): Add test of quiet mode with expiration. @@ -654,13 +655,13 @@ TEST_F(NotificationListTest, QuietMode) { // Verifies that unread_count doesn't become negative. TEST_F(NotificationListTest, UnreadCountNoNegative) { std::string id = AddNotification(); - EXPECT_EQ(1u, notification_list()->unread_count()); + EXPECT_EQ(1u, notification_list()->UnreadCount(blockers())); notification_list()->MarkSinglePopupAsDisplayed(id); - EXPECT_EQ(0u, notification_list()->unread_count()); + EXPECT_EQ(0u, notification_list()->UnreadCount(blockers())); notification_list()->MarkSinglePopupAsShown( id, false /* mark_notification_as_read */); - EXPECT_EQ(1u, notification_list()->unread_count()); + EXPECT_EQ(1u, notification_list()->UnreadCount(blockers())); // Updates the notification and verifies unread_count doesn't change. scoped_ptr<Notification> updated_notification(new Notification( @@ -674,7 +675,7 @@ TEST_F(NotificationListTest, UnreadCountNoNegative) { RichNotificationData(), NULL)); notification_list()->AddNotification(updated_notification.Pass()); - EXPECT_EQ(1u, notification_list()->unread_count()); + EXPECT_EQ(1u, notification_list()->UnreadCount(blockers())); } TEST_F(NotificationListTest, TestPushingShownNotification) { diff --git a/ui/message_center/notifier_settings.cc b/ui/message_center/notifier_settings.cc index 861e65b651..950d9a7065 100644 --- a/ui/message_center/notifier_settings.cc +++ b/ui/message_center/notifier_settings.cc @@ -10,44 +10,30 @@ namespace message_center { NotifierId::NotifierId(NotifierType type, const std::string& id) : type(type), - id(id), - system_component_type(-1) { - DCHECK(type == APPLICATION || type == SYNCED_NOTIFICATION_SERVICE); + id(id) { + DCHECK(type != WEB_PAGE); DCHECK(!id.empty()); } NotifierId::NotifierId(const GURL& url) : type(WEB_PAGE), - url(url), - system_component_type(-1) {} - -NotifierId::NotifierId(int type) - : type(SYSTEM_COMPONENT), - system_component_type(type) { - DCHECK_LE(0, system_component_type); -} + url(url) {} NotifierId::NotifierId() - : type(SYSTEM_COMPONENT), - system_component_type(-1) { + : type(SYSTEM_COMPONENT) { } bool NotifierId::operator==(const NotifierId& other) const { if (type != other.type) return false; - switch (type) { - case WEB_PAGE: - return url == other.url; - case SYSTEM_COMPONENT: - return system_component_type == other.system_component_type; - case APPLICATION: - case SYNCED_NOTIFICATION_SERVICE: - return id == other.id; - } + if (profile_id != other.profile_id) + return false; + + if (type == WEB_PAGE) + return url == other.url; - NOTREACHED(); - return false; + return id == other.id; } Notifier::Notifier(const NotifierId& notifier_id, diff --git a/ui/message_center/notifier_settings.h b/ui/message_center/notifier_settings.h index 911142794c..b14e72be96 100644 --- a/ui/message_center/notifier_settings.h +++ b/ui/message_center/notifier_settings.h @@ -7,12 +7,23 @@ #include <string> +#include "base/gtest_prod_util.h" #include "base/strings/string16.h" #include "ui/gfx/image/image.h" #include "ui/message_center/message_center_export.h" #include "url/gurl.h" +FORWARD_DECLARE_TEST(MessageCenterTrayBridgeTest, + StatusItemOnlyAfterFirstNotification); + +namespace ash { +class WebNotificationTrayTest; +} + namespace message_center { +namespace test { +class MessagePopupCollectionTest; +} class NotifierSettingsDelegate; class NotifierSettingsProvider; @@ -33,32 +44,41 @@ struct MESSAGE_CENTER_EXPORT NotifierId { SYNCED_NOTIFICATION_SERVICE, }; - // Constructor for APPLICATION and SYNCED_NOTIFICATION_SERVICE type. + // Constructor for non WEB_PAGE type. NotifierId(NotifierType type, const std::string& id); // Constructor for WEB_PAGE type. explicit NotifierId(const GURL& url); - // Constructor for system component types. The type should be positive. - explicit NotifierId(int type); - - // The default constructor which doesn't specify the notifier. Used for tests. - NotifierId(); - bool operator==(const NotifierId& other) const; NotifierType type; - // The identifier of the app notifier. Empty if it's not APPLICATION or - // SYNCED_NOTIFICATION_SERVICE. + // The identifier of the app notifier. Empty if it's WEB_PAGE. std::string id; // The URL pattern of the notifer. GURL url; - // The type of system component notifier, usually used in ash. -1 if it's not - // the system component. See also: ash/system/system_notifier.h - int system_component_type; + // The identifier of the profile where the notification is created. This is + // used for ChromeOS multi-profile support and can be empty. + std::string profile_id; + + private: + friend class MessageCenterTrayTest; + friend class test::MessagePopupCollectionTest; + friend class NotificationControllerTest; + friend class PopupCollectionTest; + friend class TrayViewControllerTest; + friend class ash::WebNotificationTrayTest; + FRIEND_TEST_ALL_PREFIXES(::MessageCenterTrayBridgeTest, + StatusItemOnlyAfterFirstNotification); + FRIEND_TEST_ALL_PREFIXES(PopupControllerTest, Creation); + FRIEND_TEST_ALL_PREFIXES(NotificationListTest, UnreadCountNoNegative); + FRIEND_TEST_ALL_PREFIXES(NotificationListTest, TestHasNotificationOfType); + + // The default constructor which doesn't specify the notifier. Used for tests. + NotifierId(); }; // The struct to hold the information of notifiers. The information will be diff --git a/ui/message_center/views/bounded_label.cc b/ui/message_center/views/bounded_label.cc index 852d583bce..2b8423b686 100644 --- a/ui/message_center/views/bounded_label.cc +++ b/ui/message_center/views/bounded_label.cc @@ -168,7 +168,6 @@ void InnerBoundedLabel::OnBoundsChanged(const gfx::Rect& previous_bounds) { void InnerBoundedLabel::OnPaint(gfx::Canvas* canvas) { views::Label::OnPaintBackground(canvas); - views::Label::OnPaintFocusBorder(canvas); views::Label::OnPaintBorder(canvas); int lines = owner_->GetLineLimit(); int height = GetSizeForWidthAndLines(width(), lines).height(); diff --git a/ui/message_center/views/message_center_button_bar.cc b/ui/message_center/views/message_center_button_bar.cc index ef8e1b4535..9eb7246ae7 100644 --- a/ui/message_center/views/message_center_button_bar.cc +++ b/ui/message_center/views/message_center_button_bar.cc @@ -24,6 +24,7 @@ #include "ui/views/controls/menu/menu_runner.h" #include "ui/views/layout/box_layout.h" #include "ui/views/layout/grid_layout.h" +#include "ui/views/painter.h" namespace message_center { @@ -50,7 +51,6 @@ class NotificationCenterButton : public views::ToggleImageButton { protected: // Overridden from views::View: virtual gfx::Size GetPreferredSize() OVERRIDE; - virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE; private: gfx::Size size_; @@ -76,17 +76,14 @@ NotificationCenterButton::NotificationCenterButton( set_focusable(true); set_request_focus_on_press(false); + + SetFocusPainter(views::Painter::CreateSolidFocusPainter( + kFocusBorderColor, + gfx::Insets(1, 2, 2, 2))); } gfx::Size NotificationCenterButton::GetPreferredSize() { return size_; } -void NotificationCenterButton::OnPaintFocusBorder(gfx::Canvas* canvas) { - if (HasFocus()) { - canvas->DrawRect(gfx::Rect(2, 1, width() - 4, height() - 3), - kFocusBorderColor); - } -} - // MessageCenterButtonBar ///////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// MessageCenterButtonBar::MessageCenterButtonBar( diff --git a/ui/message_center/views/message_center_focus_border.cc b/ui/message_center/views/message_center_focus_border.cc deleted file mode 100644 index 90a4630d22..0000000000 --- a/ui/message_center/views/message_center_focus_border.cc +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 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. - -#include "ui/message_center/views/message_center_focus_border.h" - -#include "ui/gfx/canvas.h" -#include "ui/gfx/rect.h" -#include "ui/message_center/message_center_style.h" -#include "ui/views/view.h" - -namespace message_center { - -MessageCenterFocusBorder::MessageCenterFocusBorder() {} - -MessageCenterFocusBorder::~MessageCenterFocusBorder() {} - -void MessageCenterFocusBorder::Paint(const views::View& view, - gfx::Canvas* canvas) const { - gfx::Rect rect(view.GetLocalBounds()); - rect.Inset(2, 1, 2, 3); - canvas->DrawRect(rect, kFocusBorderColor); -} - -} // namespace message_center diff --git a/ui/message_center/views/message_center_focus_border.h b/ui/message_center/views/message_center_focus_border.h deleted file mode 100644 index de49bae0e2..0000000000 --- a/ui/message_center/views/message_center_focus_border.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 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. - -#ifndef UI_MESSAGE_CENTER_VIEWS_MESSAGE_CENTER_FOCUS_BORDER_H_ -#define UI_MESSAGE_CENTER_VIEWS_MESSAGE_CENTER_FOCUS_BORDER_H_ - -#include "ui/views/focus_border.h" -#include "ui/views/view.h" - -namespace message_center { - -// Focus border class that draws a 1px blue border inset more on the bottom than -// on the sides. -class MessageCenterFocusBorder : public views::FocusBorder { - public: - MessageCenterFocusBorder(); - virtual ~MessageCenterFocusBorder(); - - private: - // views::FocusBorder overrides: - virtual void Paint(const views::View& view, gfx::Canvas* canvas) const - OVERRIDE; - - DISALLOW_COPY_AND_ASSIGN(MessageCenterFocusBorder); -}; - -} // namespace message_center - -#endif // UI_MESSAGE_CENTER_VIEWS_MESSAGE_CENTER_FOCUS_BORDER_H_ diff --git a/ui/message_center/views/message_center_view.cc b/ui/message_center/views/message_center_view.cc index d176ff73e2..44a0a9dae2 100644 --- a/ui/message_center/views/message_center_view.cc +++ b/ui/message_center/views/message_center_view.cc @@ -78,8 +78,6 @@ BoundedScrollView::BoundedScrollView(int min_height, int max_height) : min_height_(min_height), max_height_(max_height) { set_notify_enter_exit_on_child(true); - // Cancels the default dashed focus border. - set_focus_border(NULL); set_background( views::Background::CreateSolidBackground(kMessageCenterBackgroundColor)); SetVerticalScrollBar(new views::OverlayScrollBar(false)); @@ -739,7 +737,7 @@ void MessageCenterView::OnAllNotificationsCleared() { scroller_->SetEnabled(true); button_bar_->SetAllButtonsEnabled(true); button_bar_->SetCloseAllButtonEnabled(false); - message_center_->RemoveAllNotifications(true); // Action by user. + message_center_->RemoveAllVisibleNotifications(true); // Action by user. } size_t MessageCenterView::NumMessageViewsForTest() const { diff --git a/ui/message_center/views/message_popup_collection.cc b/ui/message_center/views/message_popup_collection.cc index 541963e602..2474ad00e6 100644 --- a/ui/message_center/views/message_popup_collection.cc +++ b/ui/message_center/views/message_popup_collection.cc @@ -101,6 +101,10 @@ MessagePopupCollection::~MessagePopupCollection() { screen->RemoveObserver(this); message_center_->RemoveObserver(this); + CloseAllWidgets(); +} + +void MessagePopupCollection::MarkAllPopupsShown() { std::set<std::string> closed_ids = CloseAllWidgets(); for (std::set<std::string>::iterator iter = closed_ids.begin(); iter != closed_ids.end(); iter++) { diff --git a/ui/message_center/views/message_popup_collection.h b/ui/message_center/views/message_popup_collection.h index d5ab32b163..9c7d617396 100644 --- a/ui/message_center/views/message_popup_collection.h +++ b/ui/message_center/views/message_popup_collection.h @@ -68,6 +68,8 @@ class MESSAGE_CENTER_EXPORT MessagePopupCollection bool first_item_has_no_margin); virtual ~MessagePopupCollection(); + void MarkAllPopupsShown(); + // Since these events are really coming from individual toast widgets, // it helps to be able to keep track of the sender. void OnMouseEntered(ToastContentsView* toast_entered); diff --git a/ui/message_center/views/message_view.cc b/ui/message_center/views/message_view.cc index 56e2202214..856231bae2 100644 --- a/ui/message_center/views/message_view.cc +++ b/ui/message_center/views/message_view.cc @@ -20,6 +20,7 @@ #include "ui/views/controls/button/image_button.h" #include "ui/views/controls/menu/menu_runner.h" #include "ui/views/controls/scroll_view.h" +#include "ui/views/painter.h" #include "ui/views/shadow_border.h" #include "ui/views/widget/widget.h" @@ -171,6 +172,10 @@ MessageView::MessageView(const string16& display_source) close->SetAccessibleName(l10n_util::GetStringUTF16( IDS_MESSAGE_CENTER_CLOSE_NOTIFICATION_BUTTON_ACCESSIBLE_NAME)); close_button_.reset(close); + + focus_painter_ = views::Painter::CreateSolidFocusPainter( + kFocusBorderColor, + gfx::Insets(0, 1, 3, 2)).Pass(); } MessageView::~MessageView() { @@ -239,6 +244,23 @@ bool MessageView::OnKeyReleased(const ui::KeyEvent& event) { return true; } +void MessageView::OnPaint(gfx::Canvas* canvas) { + SlideOutView::OnPaint(canvas); + views::Painter::PaintFocusPainter(this, canvas, focus_painter_.get()); +} + +void MessageView::OnFocus() { + SlideOutView::OnFocus(); + // We paint a focus indicator. + SchedulePaint(); +} + +void MessageView::OnBlur() { + SlideOutView::OnBlur(); + // We paint a focus indicator. + SchedulePaint(); +} + void MessageView::OnGestureEvent(ui::GestureEvent* event) { if (event->type() == ui::ET_GESTURE_TAP) { ClickOnNotification(); @@ -259,13 +281,6 @@ void MessageView::OnGestureEvent(ui::GestureEvent* event) { event->SetHandled(); } -void MessageView::OnPaintFocusBorder(gfx::Canvas* canvas) { - if (HasFocus()) { - canvas->DrawRect(gfx::Rect(1, 0, width() - 2, height() - 2), - message_center::kFocusBorderColor); - } -} - void MessageView::ButtonPressed(views::Button* sender, const ui::Event& event) { if (sender == close_button()) { diff --git a/ui/message_center/views/message_view.h b/ui/message_center/views/message_view.h index 961c050c56..341e9adbf8 100644 --- a/ui/message_center/views/message_view.h +++ b/ui/message_center/views/message_view.h @@ -5,6 +5,7 @@ #ifndef UI_MESSAGE_CENTER_VIEWS_MESSAGE_VIEW_H_ #define UI_MESSAGE_CENTER_VIEWS_MESSAGE_VIEW_H_ +#include "base/memory/scoped_ptr.h" #include "base/strings/string16.h" #include "ui/gfx/insets.h" #include "ui/message_center/message_center_export.h" @@ -14,6 +15,7 @@ namespace views { class ImageButton; +class Painter; class ScrollView; } @@ -58,7 +60,9 @@ class MESSAGE_CENTER_EXPORT MessageView : public views::SlideOutView, virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE; virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE; virtual bool OnKeyReleased(const ui::KeyEvent& event) OVERRIDE; - virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE; + virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; + virtual void OnFocus() OVERRIDE; + virtual void OnBlur() OVERRIDE; // Overridden from ui::EventHandler: virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE; @@ -83,6 +87,8 @@ class MESSAGE_CENTER_EXPORT MessageView : public views::SlideOutView, string16 accessible_name_; + scoped_ptr<views::Painter> focus_painter_; + DISALLOW_COPY_AND_ASSIGN(MessageView); }; diff --git a/ui/message_center/views/notification_view.cc b/ui/message_center/views/notification_view.cc index bcd1ea9ff9..0531a0f263 100644 --- a/ui/message_center/views/notification_view.cc +++ b/ui/message_center/views/notification_view.cc @@ -26,12 +26,15 @@ #include "ui/message_center/views/bounded_label.h" #include "ui/message_center/views/padded_button.h" #include "ui/native_theme/native_theme.h" +#include "ui/views/background.h" +#include "ui/views/border.h" #include "ui/views/controls/button/image_button.h" #include "ui/views/controls/image_view.h" #include "ui/views/controls/label.h" #include "ui/views/controls/progress_bar.h" #include "ui/views/layout/box_layout.h" #include "ui/views/layout/fill_layout.h" +#include "ui/views/painter.h" #include "ui/views/widget/widget.h" #if defined(USE_AURA) @@ -321,8 +324,9 @@ class NotificationButton : public views::CustomButton { // Overridden from views::View: virtual gfx::Size GetPreferredSize() OVERRIDE; virtual int GetHeightForWidth(int width) OVERRIDE; + virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; virtual void OnFocus() OVERRIDE; - virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE; + virtual void OnBlur() OVERRIDE; // Overridden from views::CustomButton: virtual void StateChanged() OVERRIDE; @@ -330,12 +334,18 @@ class NotificationButton : public views::CustomButton { private: views::ImageView* icon_; views::Label* title_; + scoped_ptr<views::Painter> focus_painter_; + + DISALLOW_COPY_AND_ASSIGN(NotificationButton); }; NotificationButton::NotificationButton(views::ButtonListener* listener) : views::CustomButton(listener), icon_(NULL), - title_(NULL) { + title_(NULL), + focus_painter_(views::Painter::CreateSolidFocusPainter( + message_center::kFocusBorderColor, + gfx::Insets(1, 2, 2, 2))) { set_focusable(true); set_request_focus_on_press(false); set_notify_enter_exit_on_child(true); @@ -392,16 +402,22 @@ int NotificationButton::GetHeightForWidth(int width) { return message_center::kButtonHeight; } +void NotificationButton::OnPaint(gfx::Canvas* canvas) { + CustomButton::OnPaint(canvas); + views::Painter::PaintFocusPainter(this, canvas, focus_painter_.get()); +} + void NotificationButton::OnFocus() { views::CustomButton::OnFocus(); ScrollRectToVisible(GetLocalBounds()); + // We render differently when focused. + SchedulePaint(); } -void NotificationButton::OnPaintFocusBorder(gfx::Canvas* canvas) { - if (HasFocus()) { - canvas->DrawRect(gfx::Rect(2, 1, width() - 4, height() - 3), - message_center::kFocusBorderColor); - } +void NotificationButton::OnBlur() { + views::CustomButton::OnBlur(); + // We render differently when focused. + SchedulePaint(); } void NotificationButton::StateChanged() { diff --git a/ui/message_center/views/notifier_settings_view.cc b/ui/message_center/views/notifier_settings_view.cc index 47af26016c..399283b7b5 100644 --- a/ui/message_center/views/notifier_settings_view.cc +++ b/ui/message_center/views/notifier_settings_view.cc @@ -21,7 +21,6 @@ #include "ui/gfx/image/image.h" #include "ui/gfx/size.h" #include "ui/message_center/message_center_style.h" -#include "ui/message_center/views/message_center_focus_border.h" #include "ui/message_center/views/message_center_view.h" #include "ui/views/background.h" #include "ui/views/border.h" @@ -39,6 +38,7 @@ #include "ui/views/layout/box_layout.h" #include "ui/views/layout/fill_layout.h" #include "ui/views/layout/grid_layout.h" +#include "ui/views/painter.h" #include "ui/views/widget/widget.h" #if defined(USE_AURA) @@ -124,6 +124,11 @@ const int kComputedTitleTopMargin = const int kComputedTitleElementSpacing = settings::kDescriptionToSwitcherSpace - kButtonPainterInsets - 1; +// A function to create a focus border. +scoped_ptr<views::Painter> CreateFocusPainter() { + return views::Painter::CreateSolidFocusPainter(kFocusBorderColor, + gfx::Insets(1, 2, 3, 2)); +} // EntryView ------------------------------------------------------------------ @@ -131,7 +136,7 @@ const int kComputedTitleElementSpacing = // middle. It also guarantee the left margin. class EntryView : public views::View { public: - EntryView(views::View* contents); + explicit EntryView(views::View* contents); virtual ~EntryView(); // views::View: @@ -141,13 +146,17 @@ class EntryView : public views::View { virtual void OnFocus() OVERRIDE; virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE; virtual bool OnKeyReleased(const ui::KeyEvent& event) OVERRIDE; + virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; + virtual void OnBlur() OVERRIDE; private: + scoped_ptr<views::Painter> focus_painter_; + DISALLOW_COPY_AND_ASSIGN(EntryView); }; -EntryView::EntryView(views::View* contents) { - set_focus_border(new MessageCenterFocusBorder()); +EntryView::EntryView(views::View* contents) + : focus_painter_(CreateFocusPainter()) { AddChildView(contents); } @@ -177,6 +186,8 @@ void EntryView::GetAccessibleState(ui::AccessibleViewState* state) { void EntryView::OnFocus() { views::View::OnFocus(); ScrollRectToVisible(GetLocalBounds()); + // We render differently when focused. + SchedulePaint(); } bool EntryView::OnKeyPressed(const ui::KeyEvent& event) { @@ -187,6 +198,17 @@ bool EntryView::OnKeyReleased(const ui::KeyEvent& event) { return child_at(0)->OnKeyReleased(event); } +void EntryView::OnPaint(gfx::Canvas* canvas) { + View::OnPaint(canvas); + views::Painter::PaintFocusPainter(this, canvas, focus_painter_.get()); +} + +void EntryView::OnBlur() { + View::OnBlur(); + // We render differently when focused. + SchedulePaint(); +} + } // namespace @@ -290,7 +312,7 @@ NotifierSettingsView::NotifierButton::NotifierButton( if (ShouldHaveLearnMoreButton()) { // Create a more-info button that will be right-aligned. learn_more_ = new views::ImageButton(this); - learn_more_->set_focus_border(new MessageCenterFocusBorder()); + learn_more_->SetFocusPainter(CreateFocusPainter()); learn_more_->set_request_focus_on_press(false); learn_more_->set_focusable(true); @@ -462,7 +484,6 @@ NotifierSettingsView::NotifierSettingsView(NotifierSettingsProvider* provider) provider_->AddObserver(this); set_focusable(true); - set_focus_border(NULL); set_background( views::Background::CreateSolidBackground(kMessageCenterBackgroundColor)); if (get_use_acceleration_when_possible()) @@ -578,7 +599,7 @@ void NotifierSettingsView::UpdateContentsView( kMenuButtonVerticalPadding, kMenuButtonLeftPadding, kMenuButtonVerticalPadding, kMenuButtonRightPadding)); notifier_group_selector_->set_border(selector_border.release()); - notifier_group_selector_->set_focus_border(NULL); + notifier_group_selector_->SetFocusPainter(scoped_ptr<views::Painter>()); notifier_group_selector_->set_animate_on_state_change(false); notifier_group_selector_->set_focusable(true); contents_title_view->AddChildView(notifier_group_selector_); diff --git a/ui/message_center/views/padded_button.cc b/ui/message_center/views/padded_button.cc index 950e133aca..cb7810be65 100644 --- a/ui/message_center/views/padded_button.cc +++ b/ui/message_center/views/padded_button.cc @@ -9,13 +9,17 @@ #include "ui/gfx/canvas.h" #include "ui/message_center/message_center_style.h" #include "ui/views/controls/button/image_button.h" +#include "ui/views/painter.h" namespace message_center { PaddedButton::PaddedButton(views::ButtonListener* listener) - : views::ImageButton(listener) { + : views::ImageButton(listener) { set_focusable(true); set_request_focus_on_press(false); + SetFocusPainter(views::Painter::CreateSolidFocusPainter( + kFocusBorderColor, + gfx::Insets(1, 2, 2, 2))); } PaddedButton::~PaddedButton() { @@ -65,7 +69,7 @@ void PaddedButton::OnPaint(gfx::Canvas* canvas) { if (!overlay_image_.isNull()) canvas->DrawImageInt(overlay_image_, position.x(), position.y()); } - OnPaintFocusBorder(canvas); + views::Painter::PaintFocusPainter(this, canvas, focus_painter()); } void PaddedButton::OnFocus() { @@ -73,13 +77,6 @@ void PaddedButton::OnFocus() { ScrollRectToVisible(GetLocalBounds()); } -void PaddedButton::OnPaintFocusBorder(gfx::Canvas* canvas) { - if (HasFocus()) { - canvas->DrawRect(gfx::Rect(2, 1, width() - 4, height() - 3), - message_center::kFocusBorderColor); - } -} - gfx::Point PaddedButton::ComputePaddedImagePaintPosition( const gfx::ImageSkia& image) { gfx::Vector2d offset; diff --git a/ui/message_center/views/padded_button.h b/ui/message_center/views/padded_button.h index b484ab4104..04ae5c1d36 100644 --- a/ui/message_center/views/padded_button.h +++ b/ui/message_center/views/padded_button.h @@ -27,7 +27,6 @@ class PaddedButton : public views::ImageButton { virtual gfx::Size GetPreferredSize() OVERRIDE; virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; virtual void OnFocus() OVERRIDE; - virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE; // The SetPadding() method also sets the button's image alignment (positive // values yield left/top alignments, negative values yield right/bottom ones, diff --git a/ui/message_center/views/toast_contents_view.cc b/ui/message_center/views/toast_contents_view.cc index 53c96f904e..7ac18430c5 100644 --- a/ui/message_center/views/toast_contents_view.cc +++ b/ui/message_center/views/toast_contents_view.cc @@ -19,6 +19,7 @@ #include "ui/message_center/notification.h" #include "ui/message_center/views/message_popup_collection.h" #include "ui/message_center/views/message_view.h" +#include "ui/views/background.h" #include "ui/views/view.h" #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_delegate.h" diff --git a/ui/metro_viewer/metro_viewer_messages.h b/ui/metro_viewer/metro_viewer_messages.h index 3cddb2e6fa..d562461c91 100644 --- a/ui/metro_viewer/metro_viewer_messages.h +++ b/ui/metro_viewer/metro_viewer_messages.h @@ -97,8 +97,9 @@ IPC_MESSAGE_CONTROL0(MetroViewerHostMsg_ActivateDesktopDone) // Messages sent from the browser to the viewer: // Requests the viewer to activate desktop mode. -IPC_MESSAGE_CONTROL1(MetroViewerHostMsg_ActivateDesktop, - base::FilePath /* shortcut */); +IPC_MESSAGE_CONTROL2(MetroViewerHostMsg_ActivateDesktop, + base::FilePath /* shortcut */, + bool /* ash exit */); // Requests the viewer to open a URL in desktop mode. IPC_MESSAGE_CONTROL2(MetroViewerHostMsg_OpenURLOnDesktop, diff --git a/ui/native_theme/native_theme.target.darwin-arm.mk b/ui/native_theme/native_theme.target.darwin-arm.mk index 5f1c2a745d..6d1f3fe8b8 100644 --- a/ui/native_theme/native_theme.target.darwin-arm.mk +++ b/ui/native_theme/native_theme.target.darwin-arm.mk @@ -69,6 +69,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -78,9 +79,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DNATIVE_THEME_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -109,8 +112,8 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ @@ -180,6 +183,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -189,9 +193,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DNATIVE_THEME_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -221,8 +227,8 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ diff --git a/ui/native_theme/native_theme.target.darwin-mips.mk b/ui/native_theme/native_theme.target.darwin-mips.mk index a1e9895278..731d7931f0 100644 --- a/ui/native_theme/native_theme.target.darwin-mips.mk +++ b/ui/native_theme/native_theme.target.darwin-mips.mk @@ -68,6 +68,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -77,9 +78,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DNATIVE_THEME_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -108,8 +111,8 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ @@ -178,6 +181,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -187,9 +191,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DNATIVE_THEME_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -219,8 +225,8 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ diff --git a/ui/native_theme/native_theme.target.darwin-x86.mk b/ui/native_theme/native_theme.target.darwin-x86.mk index ca49aeeec0..94de75cfe3 100644 --- a/ui/native_theme/native_theme.target.darwin-x86.mk +++ b/ui/native_theme/native_theme.target.darwin-x86.mk @@ -71,6 +71,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -80,9 +81,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DNATIVE_THEME_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -110,8 +113,8 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ @@ -184,6 +187,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -193,9 +197,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DNATIVE_THEME_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -224,8 +230,8 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ diff --git a/ui/native_theme/native_theme.target.linux-arm.mk b/ui/native_theme/native_theme.target.linux-arm.mk index 5f1c2a745d..6d1f3fe8b8 100644 --- a/ui/native_theme/native_theme.target.linux-arm.mk +++ b/ui/native_theme/native_theme.target.linux-arm.mk @@ -69,6 +69,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -78,9 +79,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DNATIVE_THEME_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -109,8 +112,8 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ @@ -180,6 +183,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -189,9 +193,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DNATIVE_THEME_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -221,8 +227,8 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ diff --git a/ui/native_theme/native_theme.target.linux-mips.mk b/ui/native_theme/native_theme.target.linux-mips.mk index a1e9895278..731d7931f0 100644 --- a/ui/native_theme/native_theme.target.linux-mips.mk +++ b/ui/native_theme/native_theme.target.linux-mips.mk @@ -68,6 +68,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -77,9 +78,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DNATIVE_THEME_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -108,8 +111,8 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ @@ -178,6 +181,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -187,9 +191,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DNATIVE_THEME_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -219,8 +225,8 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ diff --git a/ui/native_theme/native_theme.target.linux-x86.mk b/ui/native_theme/native_theme.target.linux-x86.mk index ca49aeeec0..94de75cfe3 100644 --- a/ui/native_theme/native_theme.target.linux-x86.mk +++ b/ui/native_theme/native_theme.target.linux-x86.mk @@ -71,6 +71,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -80,9 +81,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DNATIVE_THEME_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -110,8 +113,8 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ @@ -184,6 +187,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -193,9 +197,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DNATIVE_THEME_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -224,8 +230,8 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ diff --git a/ui/oak/oak_aura_window_display.cc b/ui/oak/oak_aura_window_display.cc index 18323f8766..e751a33239 100644 --- a/ui/oak/oak_aura_window_display.cc +++ b/ui/oak/oak_aura_window_display.cc @@ -99,7 +99,7 @@ int OakAuraWindowDisplay::RowCount() { base::string16 OakAuraWindowDisplay::GetText(int row, int column_id) { if (!window_) - return EmptyString16(); + return base::string16(); base::string16 text; switch (row) { @@ -153,7 +153,7 @@ base::string16 OakAuraWindowDisplay::GetText(int row, int column_id) { NOTREACHED(); break; } - return EmptyString16(); + return base::string16(); } void OakAuraWindowDisplay::SetObserver(ui::TableModelObserver* observer) { diff --git a/ui/resources/default_100_percent/common/app_list_mic_off.png b/ui/resources/default_100_percent/common/app_list_mic_off.png Binary files differnew file mode 100644 index 0000000000..a749134851 --- /dev/null +++ b/ui/resources/default_100_percent/common/app_list_mic_off.png diff --git a/ui/resources/default_100_percent/common/app_list_mic_on.png b/ui/resources/default_100_percent/common/app_list_mic_on.png Binary files differnew file mode 100644 index 0000000000..49a2c33b06 --- /dev/null +++ b/ui/resources/default_100_percent/common/app_list_mic_on.png diff --git a/ui/resources/default_100_percent/common/app_list_mic_recording.png b/ui/resources/default_100_percent/common/app_list_mic_recording.png Binary files differnew file mode 100644 index 0000000000..fa68422e31 --- /dev/null +++ b/ui/resources/default_100_percent/common/app_list_mic_recording.png diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom.png b/ui/resources/default_100_percent/common/combobox_button_bottom.png Binary files differnew file mode 100644 index 0000000000..a34d777d42 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_bottom.png diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png b/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png Binary files differnew file mode 100644 index 0000000000..4212716f7e --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom_left.png b/ui/resources/default_100_percent/common/combobox_button_bottom_left.png Binary files differnew file mode 100644 index 0000000000..0720ae3bed --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_bottom_left.png diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png b/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png Binary files differnew file mode 100644 index 0000000000..1ecabdeb72 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png b/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png Binary files differnew file mode 100644 index 0000000000..632f8d2859 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png b/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png Binary files differnew file mode 100644 index 0000000000..bcfa9c27a6 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom_right.png b/ui/resources/default_100_percent/common/combobox_button_bottom_right.png Binary files differnew file mode 100644 index 0000000000..9f94872271 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_bottom_right.png diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png b/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png Binary files differnew file mode 100644 index 0000000000..8938a40c0c --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png b/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png Binary files differnew file mode 100644 index 0000000000..bcfa9c27a6 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png diff --git a/ui/resources/default_100_percent/common/combobox_button_center.png b/ui/resources/default_100_percent/common/combobox_button_center.png Binary files differnew file mode 100644 index 0000000000..31458478a1 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_center.png diff --git a/ui/resources/default_100_percent/common/combobox_button_center_hover.png b/ui/resources/default_100_percent/common/combobox_button_center_hover.png Binary files differnew file mode 100644 index 0000000000..311daf2a7c --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_center_hover.png diff --git a/ui/resources/default_100_percent/common/combobox_button_center_left.png b/ui/resources/default_100_percent/common/combobox_button_center_left.png Binary files differnew file mode 100644 index 0000000000..8e1afddd71 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_center_left.png diff --git a/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png b/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png Binary files differnew file mode 100644 index 0000000000..fdc8e6d21b --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png diff --git a/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png b/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png Binary files differnew file mode 100644 index 0000000000..15677552f3 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png diff --git a/ui/resources/default_100_percent/common/combobox_button_center_pressed.png b/ui/resources/default_100_percent/common/combobox_button_center_pressed.png Binary files differnew file mode 100644 index 0000000000..5eb0a49994 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_center_pressed.png diff --git a/ui/resources/default_100_percent/common/combobox_button_center_right.png b/ui/resources/default_100_percent/common/combobox_button_center_right.png Binary files differnew file mode 100644 index 0000000000..c29018e4a9 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_center_right.png diff --git a/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png b/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png Binary files differnew file mode 100644 index 0000000000..019adfc260 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png diff --git a/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png b/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png Binary files differnew file mode 100644 index 0000000000..5eb0a49994 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png b/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png Binary files differnew file mode 100644 index 0000000000..2d013b652b --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png b/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png Binary files differnew file mode 100644 index 0000000000..ba2d03092d --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png b/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png Binary files differnew file mode 100644 index 0000000000..4cc5330965 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_center.png b/ui/resources/default_100_percent/common/combobox_button_menu_center.png Binary files differnew file mode 100644 index 0000000000..b90dee5682 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_menu_center.png diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png b/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png Binary files differnew file mode 100644 index 0000000000..d1bc24342a --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png b/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png Binary files differnew file mode 100644 index 0000000000..16ac060f05 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_top.png b/ui/resources/default_100_percent/common/combobox_button_menu_top.png Binary files differnew file mode 100644 index 0000000000..8633cd2906 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_menu_top.png diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png b/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png Binary files differnew file mode 100644 index 0000000000..73e2871241 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png b/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png Binary files differnew file mode 100644 index 0000000000..f98fae470e --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png diff --git a/ui/resources/default_100_percent/common/combobox_button_top.png b/ui/resources/default_100_percent/common/combobox_button_top.png Binary files differnew file mode 100644 index 0000000000..90eeee3ef8 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_top.png diff --git a/ui/resources/default_100_percent/common/combobox_button_top_hover.png b/ui/resources/default_100_percent/common/combobox_button_top_hover.png Binary files differnew file mode 100644 index 0000000000..8da4ee405f --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_top_hover.png diff --git a/ui/resources/default_100_percent/common/combobox_button_top_left.png b/ui/resources/default_100_percent/common/combobox_button_top_left.png Binary files differnew file mode 100644 index 0000000000..2070bef78d --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_top_left.png diff --git a/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png b/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png Binary files differnew file mode 100644 index 0000000000..98f3b4a6aa --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png diff --git a/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png b/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png Binary files differnew file mode 100644 index 0000000000..3baba2b75e --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png diff --git a/ui/resources/default_100_percent/common/combobox_button_top_pressed.png b/ui/resources/default_100_percent/common/combobox_button_top_pressed.png Binary files differnew file mode 100644 index 0000000000..c8a05608d9 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_top_pressed.png diff --git a/ui/resources/default_100_percent/common/combobox_button_top_right.png b/ui/resources/default_100_percent/common/combobox_button_top_right.png Binary files differnew file mode 100644 index 0000000000..aaa309b0ba --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_top_right.png diff --git a/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png b/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png Binary files differnew file mode 100644 index 0000000000..24d26d5c4e --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png diff --git a/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png b/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png Binary files differnew file mode 100644 index 0000000000..c8a05608d9 --- /dev/null +++ b/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png diff --git a/ui/resources/default_100_percent/common/password_undo_arrow.png b/ui/resources/default_100_percent/common/password_undo_arrow.png Binary files differdeleted file mode 100644 index 4b88067429..0000000000 --- a/ui/resources/default_100_percent/common/password_undo_arrow.png +++ /dev/null diff --git a/ui/resources/default_200_percent/common/app_list_mic_off.png b/ui/resources/default_200_percent/common/app_list_mic_off.png Binary files differnew file mode 100644 index 0000000000..4bf6416a82 --- /dev/null +++ b/ui/resources/default_200_percent/common/app_list_mic_off.png diff --git a/ui/resources/default_200_percent/common/app_list_mic_on.png b/ui/resources/default_200_percent/common/app_list_mic_on.png Binary files differnew file mode 100644 index 0000000000..66ffa2708e --- /dev/null +++ b/ui/resources/default_200_percent/common/app_list_mic_on.png diff --git a/ui/resources/default_200_percent/common/app_list_mic_recording.png b/ui/resources/default_200_percent/common/app_list_mic_recording.png Binary files differnew file mode 100644 index 0000000000..3a55e7157a --- /dev/null +++ b/ui/resources/default_200_percent/common/app_list_mic_recording.png diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom.png b/ui/resources/default_200_percent/common/combobox_button_bottom.png Binary files differnew file mode 100644 index 0000000000..347a8c5b74 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_bottom.png diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png b/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png Binary files differnew file mode 100644 index 0000000000..ff8490eea6 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom_left.png b/ui/resources/default_200_percent/common/combobox_button_bottom_left.png Binary files differnew file mode 100644 index 0000000000..ca074d8160 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_bottom_left.png diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png b/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png Binary files differnew file mode 100644 index 0000000000..8484e3ab74 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png b/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png Binary files differnew file mode 100644 index 0000000000..d0eb1d5b06 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png b/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png Binary files differnew file mode 100644 index 0000000000..e408d96838 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom_right.png b/ui/resources/default_200_percent/common/combobox_button_bottom_right.png Binary files differnew file mode 100644 index 0000000000..da8dac41f7 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_bottom_right.png diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png b/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png Binary files differnew file mode 100644 index 0000000000..abdf403839 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png b/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png Binary files differnew file mode 100644 index 0000000000..6ae7944f75 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png diff --git a/ui/resources/default_200_percent/common/combobox_button_center.png b/ui/resources/default_200_percent/common/combobox_button_center.png Binary files differnew file mode 100644 index 0000000000..4e12e60d6f --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_center.png diff --git a/ui/resources/default_200_percent/common/combobox_button_center_hover.png b/ui/resources/default_200_percent/common/combobox_button_center_hover.png Binary files differnew file mode 100644 index 0000000000..238dd4ca54 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_center_hover.png diff --git a/ui/resources/default_200_percent/common/combobox_button_center_left.png b/ui/resources/default_200_percent/common/combobox_button_center_left.png Binary files differnew file mode 100644 index 0000000000..8b5e3f8582 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_center_left.png diff --git a/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png b/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png Binary files differnew file mode 100644 index 0000000000..ff755aba4f --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png diff --git a/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png b/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png Binary files differnew file mode 100644 index 0000000000..4d9ede747c --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png diff --git a/ui/resources/default_200_percent/common/combobox_button_center_pressed.png b/ui/resources/default_200_percent/common/combobox_button_center_pressed.png Binary files differnew file mode 100644 index 0000000000..ed2240fdf1 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_center_pressed.png diff --git a/ui/resources/default_200_percent/common/combobox_button_center_right.png b/ui/resources/default_200_percent/common/combobox_button_center_right.png Binary files differnew file mode 100644 index 0000000000..41b32bb5f1 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_center_right.png diff --git a/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png b/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png Binary files differnew file mode 100644 index 0000000000..f198aed475 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png diff --git a/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png b/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png Binary files differnew file mode 100644 index 0000000000..ed2240fdf1 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png b/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png Binary files differnew file mode 100644 index 0000000000..0918a33ad7 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png b/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png Binary files differnew file mode 100644 index 0000000000..fd822b01a0 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png b/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png Binary files differnew file mode 100644 index 0000000000..6e7249b987 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_center.png b/ui/resources/default_200_percent/common/combobox_button_menu_center.png Binary files differnew file mode 100644 index 0000000000..f115e943c2 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_menu_center.png diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png b/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png Binary files differnew file mode 100644 index 0000000000..b93c29e0f5 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png b/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png Binary files differnew file mode 100644 index 0000000000..1924c53ff9 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_top.png b/ui/resources/default_200_percent/common/combobox_button_menu_top.png Binary files differnew file mode 100644 index 0000000000..a0b8bff9cd --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_menu_top.png diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png b/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png Binary files differnew file mode 100644 index 0000000000..f071c91fd3 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png b/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png Binary files differnew file mode 100644 index 0000000000..1cf11228bd --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png diff --git a/ui/resources/default_200_percent/common/combobox_button_top.png b/ui/resources/default_200_percent/common/combobox_button_top.png Binary files differnew file mode 100644 index 0000000000..06e5293341 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_top.png diff --git a/ui/resources/default_200_percent/common/combobox_button_top_hover.png b/ui/resources/default_200_percent/common/combobox_button_top_hover.png Binary files differnew file mode 100644 index 0000000000..86bbd146fd --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_top_hover.png diff --git a/ui/resources/default_200_percent/common/combobox_button_top_left.png b/ui/resources/default_200_percent/common/combobox_button_top_left.png Binary files differnew file mode 100644 index 0000000000..3da3b163ee --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_top_left.png diff --git a/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png b/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png Binary files differnew file mode 100644 index 0000000000..11ec5e91ba --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png diff --git a/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png b/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png Binary files differnew file mode 100644 index 0000000000..965f4e8386 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png diff --git a/ui/resources/default_200_percent/common/combobox_button_top_pressed.png b/ui/resources/default_200_percent/common/combobox_button_top_pressed.png Binary files differnew file mode 100644 index 0000000000..10a468d33f --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_top_pressed.png diff --git a/ui/resources/default_200_percent/common/combobox_button_top_right.png b/ui/resources/default_200_percent/common/combobox_button_top_right.png Binary files differnew file mode 100644 index 0000000000..010f8b58ce --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_top_right.png diff --git a/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png b/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png Binary files differnew file mode 100644 index 0000000000..3ade75c498 --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png diff --git a/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png b/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png Binary files differnew file mode 100644 index 0000000000..10a468d33f --- /dev/null +++ b/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png diff --git a/ui/resources/default_200_percent/common/password_undo_arrow.png b/ui/resources/default_200_percent/common/password_undo_arrow.png Binary files differdeleted file mode 100644 index 99fd22435e..0000000000 --- a/ui/resources/default_200_percent/common/password_undo_arrow.png +++ /dev/null diff --git a/ui/resources/ui_resources.grd b/ui/resources/ui_resources.grd index 3fd1115229..6a550cb909 100644 --- a/ui/resources/ui_resources.grd +++ b/ui/resources/ui_resources.grd @@ -26,6 +26,9 @@ <structure type="chrome_scaled_image" name="IDR_APP_LIST_TOOLS_NORMAL" file="common/app_list_tools_normal.png" /> <structure type="chrome_scaled_image" name="IDR_APP_LIST_TOOLS_PRESSED" file="common/app_list_tools_pressed.png" /> <structure type="chrome_scaled_image" name="IDR_APP_LIST_FOLDER_BACK_NORMAL" file="common/app_list_folder_back_normal.png" /> + <structure type="chrome_scaled_image" name="IDR_APP_LIST_SPEECH_MIC_ON" file="common/app_list_mic_on.png" /> + <structure type="chrome_scaled_image" name="IDR_APP_LIST_SPEECH_MIC_OFF" file="common/app_list_mic_off.png" /> + <structure type="chrome_scaled_image" name="IDR_APP_LIST_SPEECH_MIC_RECORDING" file="common/app_list_mic_recording.png" /> <if expr="is_win"> <structure type="chrome_scaled_image" name="IDR_APP_LIST_USER_INDICATOR" file="win/app_list_user_indicator.png" /> </if> @@ -207,6 +210,42 @@ <structure type="chrome_scaled_image" name="IDR_CLOSE_SA_H" file="close_sa_hover.png" /> <structure type="chrome_scaled_image" name="IDR_CLOSE_SA_P" file="close_sa_pressed.png" /> </if> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_BOTTOM" file="common/combobox_button_bottom.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_BOTTOM" file="common/combobox_button_bottom_hover.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_BOTTOM" file="common/combobox_button_bottom_pressed.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_BOTTOM_LEFT" file="common/combobox_button_bottom_left.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_BOTTOM_LEFT" file="common/combobox_button_bottom_left_hover.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_BOTTOM_LEFT" file="common/combobox_button_bottom_left_pressed.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_BOTTOM_RIGHT" file="common/combobox_button_bottom_right.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_BOTTOM_RIGHT" file="common/combobox_button_bottom_right_hover.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_BOTTOM_RIGHT" file="common/combobox_button_bottom_right_pressed.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_CENTER" file="common/combobox_button_center.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_CENTER" file="common/combobox_button_center_hover.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_CENTER" file="common/combobox_button_center_pressed.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_LEFT" file="common/combobox_button_center_left.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_LEFT" file="common/combobox_button_center_left_hover.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_LEFT" file="common/combobox_button_center_left_pressed.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_RIGHT" file="common/combobox_button_center_right.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_RIGHT" file="common/combobox_button_center_right_hover.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_RIGHT" file="common/combobox_button_center_right_pressed.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_MENU_BOTTOM" file="common/combobox_button_menu_bottom.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_MENU_BOTTOM" file="common/combobox_button_menu_bottom_hover.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_MENU_BOTTOM" file="common/combobox_button_menu_bottom_pressed.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_MENU_CENTER" file="common/combobox_button_menu_center.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_MENU_CENTER" file="common/combobox_button_menu_center_hover.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_MENU_CENTER" file="common/combobox_button_menu_center_pressed.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_MENU_TOP" file="common/combobox_button_menu_top.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_MENU_TOP" file="common/combobox_button_menu_top_hover.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_MENU_TOP" file="common/combobox_button_menu_top_pressed.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_TOP" file="common/combobox_button_top.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_TOP" file="common/combobox_button_top_hover.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_TOP" file="common/combobox_button_top_pressed.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_TOP_LEFT" file="common/combobox_button_top_left.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_TOP_LEFT" file="common/combobox_button_top_left_hover.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_TOP_LEFT" file="common/combobox_button_top_left_pressed.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_TOP_RIGHT" file="common/combobox_button_top_right.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_TOP_RIGHT" file="common/combobox_button_top_right_hover.png" /> + <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_TOP_RIGHT" file="common/combobox_button_top_right_pressed.png" /> <structure type="chrome_scaled_image" name="IDR_CONTENT_BOTTOM_CENTER" file="content_bottom_center.png" /> <structure type="chrome_scaled_image" name="IDR_CONTENT_BOTTOM_LEFT_CORNER" file="content_bottom_left_corner.png" /> <structure type="chrome_scaled_image" name="IDR_CONTENT_BOTTOM_RIGHT_CORNER" file="content_bottom_right_corner.png" /> @@ -308,7 +347,6 @@ <structure type="chrome_scaled_image" name="IDR_PANEL_TOP_RIGHT_CORNER" file="panel_top_right_corner.png" /> <structure type="chrome_scaled_image" name="IDR_PANEL_BOTTOM_LEFT_CORNER" file="panel_bottom_left_corner.png" /> <structure type="chrome_scaled_image" name="IDR_PANEL_BOTTOM_RIGHT_CORNER" file="panel_bottom_right_corner.png" /> - <structure type="chrome_scaled_image" name="IDR_PASSWORD_UNDO_ARROW" file="common/password_undo_arrow.png" /> <if expr="is_posix and not is_macosx and not is_ios and not pp_ifdef('use_aura')"> <structure type="chrome_scaled_image" name="IDR_PROGRESS_BAR" file="linux/linux-progress-bar.png" /> <structure type="chrome_scaled_image" name="IDR_PROGRESS_BORDER_LEFT" file="linux/linux-progress-border-left.png" /> diff --git a/ui/resources/ui_resources.target.darwin-arm.mk b/ui/resources/ui_resources.target.darwin-arm.mk index 84d8e0e2cd..b024d3d04c 100644 --- a/ui/resources/ui_resources.target.darwin-arm.mk +++ b/ui/resources/ui_resources.target.darwin-arm.mk @@ -18,9 +18,9 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_local_pa $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) -$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) +$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ; $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ; @@ -37,7 +37,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: gyp_share $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: $(LOCAL_PATH)/third_party/jstemplate/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/webui_resources.grd $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/webui/resources/css/alert_overlay.css $(LOCAL_PATH)/ui/webui/resources/css/apps/common.css $(LOCAL_PATH)/ui/webui/resources/css/apps/topbutton_bar.css $(LOCAL_PATH)/ui/webui/resources/css/bubble.css $(LOCAL_PATH)/ui/webui/resources/css/bubble_button.css $(LOCAL_PATH)/ui/webui/resources/css/butter_bar.css $(LOCAL_PATH)/ui/webui/resources/css/chrome_shared.css $(LOCAL_PATH)/ui/webui/resources/css/dialogs.css $(LOCAL_PATH)/ui/webui/resources/css/list.css $(LOCAL_PATH)/ui/webui/resources/css/menu.css $(LOCAL_PATH)/ui/webui/resources/css/menu_button.css $(LOCAL_PATH)/ui/webui/resources/css/overlay.css $(LOCAL_PATH)/ui/webui/resources/css/spinner.css $(LOCAL_PATH)/ui/webui/resources/css/table.css $(LOCAL_PATH)/ui/webui/resources/css/tabs.css $(LOCAL_PATH)/ui/webui/resources/css/throbber.css $(LOCAL_PATH)/ui/webui/resources/css/trash.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css.js $(LOCAL_PATH)/ui/webui/resources/css/widgets.css $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/check.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_black.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_white.png $(LOCAL_PATH)/ui/webui/resources/images/clouds.png $(LOCAL_PATH)/ui/webui/resources/images/disabled_select.png $(LOCAL_PATH)/ui/webui/resources/images/gear.png $(LOCAL_PATH)/ui/webui/resources/images/google-transparent.png $(LOCAL_PATH)/ui/webui/resources/images/help.png $(LOCAL_PATH)/ui/webui/resources/images/question_mark.png $(LOCAL_PATH)/ui/webui/resources/images/select.png $(LOCAL_PATH)/ui/webui/resources/images/spinner.svg $(LOCAL_PATH)/ui/webui/resources/images/throbber.svg $(LOCAL_PATH)/ui/webui/resources/images/trash.png $(LOCAL_PATH)/ui/webui/resources/js/assert.js $(LOCAL_PATH)/ui/webui/resources/js/cr.js $(LOCAL_PATH)/ui/webui/resources/js/cr/event_target.js $(LOCAL_PATH)/ui/webui/resources/js/cr/link_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/promise.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/alert_overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/array_data_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/autocomplete_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/card_slider.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/command.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/dialogs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/drag_wrapper.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_outline_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/grid.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_single_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/position_util.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/repeating_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_header.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tabs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/touch_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tree.js $(LOCAL_PATH)/ui/webui/resources/js/event_tracker.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_process.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template2.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template_no_process.js $(LOCAL_PATH)/ui/webui/resources/js/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/js/load_time_data.js $(LOCAL_PATH)/ui/webui/resources/js/local_strings.js $(LOCAL_PATH)/ui/webui/resources/js/media_common.js $(LOCAL_PATH)/ui/webui/resources/js/parse_html_subset.js $(LOCAL_PATH)/ui/webui/resources/js/util.js $(LOCAL_PATH)/ui/webui/resources/js/webui_resource_test.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ../webui/resources/webui_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ; $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ; @@ -50,7 +50,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: gyp $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_unscaled_resources.grd $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_unscaled_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/ui_unscaled_resources.rc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h ; diff --git a/ui/resources/ui_resources.target.darwin-mips.mk b/ui/resources/ui_resources.target.darwin-mips.mk index 84d8e0e2cd..b024d3d04c 100644 --- a/ui/resources/ui_resources.target.darwin-mips.mk +++ b/ui/resources/ui_resources.target.darwin-mips.mk @@ -18,9 +18,9 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_local_pa $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) -$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) +$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ; $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ; @@ -37,7 +37,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: gyp_share $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: $(LOCAL_PATH)/third_party/jstemplate/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/webui_resources.grd $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/webui/resources/css/alert_overlay.css $(LOCAL_PATH)/ui/webui/resources/css/apps/common.css $(LOCAL_PATH)/ui/webui/resources/css/apps/topbutton_bar.css $(LOCAL_PATH)/ui/webui/resources/css/bubble.css $(LOCAL_PATH)/ui/webui/resources/css/bubble_button.css $(LOCAL_PATH)/ui/webui/resources/css/butter_bar.css $(LOCAL_PATH)/ui/webui/resources/css/chrome_shared.css $(LOCAL_PATH)/ui/webui/resources/css/dialogs.css $(LOCAL_PATH)/ui/webui/resources/css/list.css $(LOCAL_PATH)/ui/webui/resources/css/menu.css $(LOCAL_PATH)/ui/webui/resources/css/menu_button.css $(LOCAL_PATH)/ui/webui/resources/css/overlay.css $(LOCAL_PATH)/ui/webui/resources/css/spinner.css $(LOCAL_PATH)/ui/webui/resources/css/table.css $(LOCAL_PATH)/ui/webui/resources/css/tabs.css $(LOCAL_PATH)/ui/webui/resources/css/throbber.css $(LOCAL_PATH)/ui/webui/resources/css/trash.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css.js $(LOCAL_PATH)/ui/webui/resources/css/widgets.css $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/check.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_black.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_white.png $(LOCAL_PATH)/ui/webui/resources/images/clouds.png $(LOCAL_PATH)/ui/webui/resources/images/disabled_select.png $(LOCAL_PATH)/ui/webui/resources/images/gear.png $(LOCAL_PATH)/ui/webui/resources/images/google-transparent.png $(LOCAL_PATH)/ui/webui/resources/images/help.png $(LOCAL_PATH)/ui/webui/resources/images/question_mark.png $(LOCAL_PATH)/ui/webui/resources/images/select.png $(LOCAL_PATH)/ui/webui/resources/images/spinner.svg $(LOCAL_PATH)/ui/webui/resources/images/throbber.svg $(LOCAL_PATH)/ui/webui/resources/images/trash.png $(LOCAL_PATH)/ui/webui/resources/js/assert.js $(LOCAL_PATH)/ui/webui/resources/js/cr.js $(LOCAL_PATH)/ui/webui/resources/js/cr/event_target.js $(LOCAL_PATH)/ui/webui/resources/js/cr/link_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/promise.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/alert_overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/array_data_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/autocomplete_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/card_slider.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/command.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/dialogs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/drag_wrapper.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_outline_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/grid.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_single_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/position_util.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/repeating_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_header.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tabs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/touch_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tree.js $(LOCAL_PATH)/ui/webui/resources/js/event_tracker.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_process.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template2.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template_no_process.js $(LOCAL_PATH)/ui/webui/resources/js/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/js/load_time_data.js $(LOCAL_PATH)/ui/webui/resources/js/local_strings.js $(LOCAL_PATH)/ui/webui/resources/js/media_common.js $(LOCAL_PATH)/ui/webui/resources/js/parse_html_subset.js $(LOCAL_PATH)/ui/webui/resources/js/util.js $(LOCAL_PATH)/ui/webui/resources/js/webui_resource_test.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ../webui/resources/webui_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ; $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ; @@ -50,7 +50,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: gyp $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_unscaled_resources.grd $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_unscaled_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/ui_unscaled_resources.rc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h ; diff --git a/ui/resources/ui_resources.target.darwin-x86.mk b/ui/resources/ui_resources.target.darwin-x86.mk index 84d8e0e2cd..7a6971f901 100644 --- a/ui/resources/ui_resources.target.darwin-x86.mk +++ b/ui/resources/ui_resources.target.darwin-x86.mk @@ -18,9 +18,9 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_local_pa $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) -$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) +$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ; $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ; @@ -37,7 +37,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: gyp_share $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: $(LOCAL_PATH)/third_party/jstemplate/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/webui_resources.grd $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/webui/resources/css/alert_overlay.css $(LOCAL_PATH)/ui/webui/resources/css/apps/common.css $(LOCAL_PATH)/ui/webui/resources/css/apps/topbutton_bar.css $(LOCAL_PATH)/ui/webui/resources/css/bubble.css $(LOCAL_PATH)/ui/webui/resources/css/bubble_button.css $(LOCAL_PATH)/ui/webui/resources/css/butter_bar.css $(LOCAL_PATH)/ui/webui/resources/css/chrome_shared.css $(LOCAL_PATH)/ui/webui/resources/css/dialogs.css $(LOCAL_PATH)/ui/webui/resources/css/list.css $(LOCAL_PATH)/ui/webui/resources/css/menu.css $(LOCAL_PATH)/ui/webui/resources/css/menu_button.css $(LOCAL_PATH)/ui/webui/resources/css/overlay.css $(LOCAL_PATH)/ui/webui/resources/css/spinner.css $(LOCAL_PATH)/ui/webui/resources/css/table.css $(LOCAL_PATH)/ui/webui/resources/css/tabs.css $(LOCAL_PATH)/ui/webui/resources/css/throbber.css $(LOCAL_PATH)/ui/webui/resources/css/trash.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css.js $(LOCAL_PATH)/ui/webui/resources/css/widgets.css $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/check.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_black.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_white.png $(LOCAL_PATH)/ui/webui/resources/images/clouds.png $(LOCAL_PATH)/ui/webui/resources/images/disabled_select.png $(LOCAL_PATH)/ui/webui/resources/images/gear.png $(LOCAL_PATH)/ui/webui/resources/images/google-transparent.png $(LOCAL_PATH)/ui/webui/resources/images/help.png $(LOCAL_PATH)/ui/webui/resources/images/question_mark.png $(LOCAL_PATH)/ui/webui/resources/images/select.png $(LOCAL_PATH)/ui/webui/resources/images/spinner.svg $(LOCAL_PATH)/ui/webui/resources/images/throbber.svg $(LOCAL_PATH)/ui/webui/resources/images/trash.png $(LOCAL_PATH)/ui/webui/resources/js/assert.js $(LOCAL_PATH)/ui/webui/resources/js/cr.js $(LOCAL_PATH)/ui/webui/resources/js/cr/event_target.js $(LOCAL_PATH)/ui/webui/resources/js/cr/link_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/promise.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/alert_overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/array_data_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/autocomplete_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/card_slider.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/command.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/dialogs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/drag_wrapper.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_outline_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/grid.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_single_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/position_util.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/repeating_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_header.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tabs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/touch_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tree.js $(LOCAL_PATH)/ui/webui/resources/js/event_tracker.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_process.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template2.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template_no_process.js $(LOCAL_PATH)/ui/webui/resources/js/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/js/load_time_data.js $(LOCAL_PATH)/ui/webui/resources/js/local_strings.js $(LOCAL_PATH)/ui/webui/resources/js/media_common.js $(LOCAL_PATH)/ui/webui/resources/js/parse_html_subset.js $(LOCAL_PATH)/ui/webui/resources/js/util.js $(LOCAL_PATH)/ui/webui/resources/js/webui_resource_test.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ../webui/resources/webui_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ; $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ; @@ -50,7 +50,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: gyp $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_unscaled_resources.grd $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_unscaled_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/ui_unscaled_resources.rc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h ; diff --git a/ui/resources/ui_resources.target.linux-arm.mk b/ui/resources/ui_resources.target.linux-arm.mk index 84d8e0e2cd..b024d3d04c 100644 --- a/ui/resources/ui_resources.target.linux-arm.mk +++ b/ui/resources/ui_resources.target.linux-arm.mk @@ -18,9 +18,9 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_local_pa $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) -$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) +$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ; $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ; @@ -37,7 +37,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: gyp_share $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: $(LOCAL_PATH)/third_party/jstemplate/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/webui_resources.grd $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/webui/resources/css/alert_overlay.css $(LOCAL_PATH)/ui/webui/resources/css/apps/common.css $(LOCAL_PATH)/ui/webui/resources/css/apps/topbutton_bar.css $(LOCAL_PATH)/ui/webui/resources/css/bubble.css $(LOCAL_PATH)/ui/webui/resources/css/bubble_button.css $(LOCAL_PATH)/ui/webui/resources/css/butter_bar.css $(LOCAL_PATH)/ui/webui/resources/css/chrome_shared.css $(LOCAL_PATH)/ui/webui/resources/css/dialogs.css $(LOCAL_PATH)/ui/webui/resources/css/list.css $(LOCAL_PATH)/ui/webui/resources/css/menu.css $(LOCAL_PATH)/ui/webui/resources/css/menu_button.css $(LOCAL_PATH)/ui/webui/resources/css/overlay.css $(LOCAL_PATH)/ui/webui/resources/css/spinner.css $(LOCAL_PATH)/ui/webui/resources/css/table.css $(LOCAL_PATH)/ui/webui/resources/css/tabs.css $(LOCAL_PATH)/ui/webui/resources/css/throbber.css $(LOCAL_PATH)/ui/webui/resources/css/trash.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css.js $(LOCAL_PATH)/ui/webui/resources/css/widgets.css $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/check.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_black.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_white.png $(LOCAL_PATH)/ui/webui/resources/images/clouds.png $(LOCAL_PATH)/ui/webui/resources/images/disabled_select.png $(LOCAL_PATH)/ui/webui/resources/images/gear.png $(LOCAL_PATH)/ui/webui/resources/images/google-transparent.png $(LOCAL_PATH)/ui/webui/resources/images/help.png $(LOCAL_PATH)/ui/webui/resources/images/question_mark.png $(LOCAL_PATH)/ui/webui/resources/images/select.png $(LOCAL_PATH)/ui/webui/resources/images/spinner.svg $(LOCAL_PATH)/ui/webui/resources/images/throbber.svg $(LOCAL_PATH)/ui/webui/resources/images/trash.png $(LOCAL_PATH)/ui/webui/resources/js/assert.js $(LOCAL_PATH)/ui/webui/resources/js/cr.js $(LOCAL_PATH)/ui/webui/resources/js/cr/event_target.js $(LOCAL_PATH)/ui/webui/resources/js/cr/link_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/promise.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/alert_overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/array_data_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/autocomplete_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/card_slider.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/command.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/dialogs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/drag_wrapper.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_outline_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/grid.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_single_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/position_util.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/repeating_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_header.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tabs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/touch_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tree.js $(LOCAL_PATH)/ui/webui/resources/js/event_tracker.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_process.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template2.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template_no_process.js $(LOCAL_PATH)/ui/webui/resources/js/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/js/load_time_data.js $(LOCAL_PATH)/ui/webui/resources/js/local_strings.js $(LOCAL_PATH)/ui/webui/resources/js/media_common.js $(LOCAL_PATH)/ui/webui/resources/js/parse_html_subset.js $(LOCAL_PATH)/ui/webui/resources/js/util.js $(LOCAL_PATH)/ui/webui/resources/js/webui_resource_test.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ../webui/resources/webui_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ; $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ; @@ -50,7 +50,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: gyp $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_unscaled_resources.grd $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_unscaled_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/ui_unscaled_resources.rc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h ; diff --git a/ui/resources/ui_resources.target.linux-mips.mk b/ui/resources/ui_resources.target.linux-mips.mk index 84d8e0e2cd..b024d3d04c 100644 --- a/ui/resources/ui_resources.target.linux-mips.mk +++ b/ui/resources/ui_resources.target.linux-mips.mk @@ -18,9 +18,9 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_local_pa $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) -$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) +$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ; $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ; @@ -37,7 +37,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: gyp_share $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: $(LOCAL_PATH)/third_party/jstemplate/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/webui_resources.grd $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/webui/resources/css/alert_overlay.css $(LOCAL_PATH)/ui/webui/resources/css/apps/common.css $(LOCAL_PATH)/ui/webui/resources/css/apps/topbutton_bar.css $(LOCAL_PATH)/ui/webui/resources/css/bubble.css $(LOCAL_PATH)/ui/webui/resources/css/bubble_button.css $(LOCAL_PATH)/ui/webui/resources/css/butter_bar.css $(LOCAL_PATH)/ui/webui/resources/css/chrome_shared.css $(LOCAL_PATH)/ui/webui/resources/css/dialogs.css $(LOCAL_PATH)/ui/webui/resources/css/list.css $(LOCAL_PATH)/ui/webui/resources/css/menu.css $(LOCAL_PATH)/ui/webui/resources/css/menu_button.css $(LOCAL_PATH)/ui/webui/resources/css/overlay.css $(LOCAL_PATH)/ui/webui/resources/css/spinner.css $(LOCAL_PATH)/ui/webui/resources/css/table.css $(LOCAL_PATH)/ui/webui/resources/css/tabs.css $(LOCAL_PATH)/ui/webui/resources/css/throbber.css $(LOCAL_PATH)/ui/webui/resources/css/trash.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css.js $(LOCAL_PATH)/ui/webui/resources/css/widgets.css $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/check.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_black.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_white.png $(LOCAL_PATH)/ui/webui/resources/images/clouds.png $(LOCAL_PATH)/ui/webui/resources/images/disabled_select.png $(LOCAL_PATH)/ui/webui/resources/images/gear.png $(LOCAL_PATH)/ui/webui/resources/images/google-transparent.png $(LOCAL_PATH)/ui/webui/resources/images/help.png $(LOCAL_PATH)/ui/webui/resources/images/question_mark.png $(LOCAL_PATH)/ui/webui/resources/images/select.png $(LOCAL_PATH)/ui/webui/resources/images/spinner.svg $(LOCAL_PATH)/ui/webui/resources/images/throbber.svg $(LOCAL_PATH)/ui/webui/resources/images/trash.png $(LOCAL_PATH)/ui/webui/resources/js/assert.js $(LOCAL_PATH)/ui/webui/resources/js/cr.js $(LOCAL_PATH)/ui/webui/resources/js/cr/event_target.js $(LOCAL_PATH)/ui/webui/resources/js/cr/link_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/promise.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/alert_overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/array_data_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/autocomplete_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/card_slider.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/command.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/dialogs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/drag_wrapper.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_outline_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/grid.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_single_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/position_util.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/repeating_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_header.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tabs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/touch_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tree.js $(LOCAL_PATH)/ui/webui/resources/js/event_tracker.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_process.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template2.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template_no_process.js $(LOCAL_PATH)/ui/webui/resources/js/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/js/load_time_data.js $(LOCAL_PATH)/ui/webui/resources/js/local_strings.js $(LOCAL_PATH)/ui/webui/resources/js/media_common.js $(LOCAL_PATH)/ui/webui/resources/js/parse_html_subset.js $(LOCAL_PATH)/ui/webui/resources/js/util.js $(LOCAL_PATH)/ui/webui/resources/js/webui_resource_test.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ../webui/resources/webui_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ; $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ; @@ -50,7 +50,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: gyp $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_unscaled_resources.grd $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_unscaled_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/ui_unscaled_resources.rc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h ; diff --git a/ui/resources/ui_resources.target.linux-x86.mk b/ui/resources/ui_resources.target.linux-x86.mk index 84d8e0e2cd..7a6971f901 100644 --- a/ui/resources/ui_resources.target.linux-x86.mk +++ b/ui/resources/ui_resources.target.linux-x86.mk @@ -18,9 +18,9 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_local_pa $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) -$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) +$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ; $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ; @@ -37,7 +37,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: gyp_share $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: $(LOCAL_PATH)/third_party/jstemplate/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/webui_resources.grd $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/webui/resources/css/alert_overlay.css $(LOCAL_PATH)/ui/webui/resources/css/apps/common.css $(LOCAL_PATH)/ui/webui/resources/css/apps/topbutton_bar.css $(LOCAL_PATH)/ui/webui/resources/css/bubble.css $(LOCAL_PATH)/ui/webui/resources/css/bubble_button.css $(LOCAL_PATH)/ui/webui/resources/css/butter_bar.css $(LOCAL_PATH)/ui/webui/resources/css/chrome_shared.css $(LOCAL_PATH)/ui/webui/resources/css/dialogs.css $(LOCAL_PATH)/ui/webui/resources/css/list.css $(LOCAL_PATH)/ui/webui/resources/css/menu.css $(LOCAL_PATH)/ui/webui/resources/css/menu_button.css $(LOCAL_PATH)/ui/webui/resources/css/overlay.css $(LOCAL_PATH)/ui/webui/resources/css/spinner.css $(LOCAL_PATH)/ui/webui/resources/css/table.css $(LOCAL_PATH)/ui/webui/resources/css/tabs.css $(LOCAL_PATH)/ui/webui/resources/css/throbber.css $(LOCAL_PATH)/ui/webui/resources/css/trash.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css.js $(LOCAL_PATH)/ui/webui/resources/css/widgets.css $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/check.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_black.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_white.png $(LOCAL_PATH)/ui/webui/resources/images/clouds.png $(LOCAL_PATH)/ui/webui/resources/images/disabled_select.png $(LOCAL_PATH)/ui/webui/resources/images/gear.png $(LOCAL_PATH)/ui/webui/resources/images/google-transparent.png $(LOCAL_PATH)/ui/webui/resources/images/help.png $(LOCAL_PATH)/ui/webui/resources/images/question_mark.png $(LOCAL_PATH)/ui/webui/resources/images/select.png $(LOCAL_PATH)/ui/webui/resources/images/spinner.svg $(LOCAL_PATH)/ui/webui/resources/images/throbber.svg $(LOCAL_PATH)/ui/webui/resources/images/trash.png $(LOCAL_PATH)/ui/webui/resources/js/assert.js $(LOCAL_PATH)/ui/webui/resources/js/cr.js $(LOCAL_PATH)/ui/webui/resources/js/cr/event_target.js $(LOCAL_PATH)/ui/webui/resources/js/cr/link_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/promise.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/alert_overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/array_data_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/autocomplete_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/card_slider.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/command.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/dialogs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/drag_wrapper.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_outline_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/grid.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_single_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/position_util.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/repeating_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_header.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tabs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/touch_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tree.js $(LOCAL_PATH)/ui/webui/resources/js/event_tracker.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_process.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template2.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template_no_process.js $(LOCAL_PATH)/ui/webui/resources/js/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/js/load_time_data.js $(LOCAL_PATH)/ui/webui/resources/js/local_strings.js $(LOCAL_PATH)/ui/webui/resources/js/media_common.js $(LOCAL_PATH)/ui/webui/resources/js/parse_html_subset.js $(LOCAL_PATH)/ui/webui/resources/js/util.js $(LOCAL_PATH)/ui/webui/resources/js/webui_resource_test.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ../webui/resources/webui_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ; $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ; @@ -50,7 +50,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: gyp $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH)) $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_unscaled_resources.grd $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES) @echo "Gyp action: Generating resources from ui_unscaled_resources.grd ($@)" - $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses + $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses $(gyp_shared_intermediate_dir)/ui/ui_resources/ui_unscaled_resources.rc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h ; diff --git a/ui/shell_dialogs/DEPS b/ui/shell_dialogs/DEPS index 32291d0bc0..acb8514c82 100644 --- a/ui/shell_dialogs/DEPS +++ b/ui/shell_dialogs/DEPS @@ -1,7 +1,6 @@ include_rules = [ "+grit/ui_strings.h", "+jni", - "+ui/android", "+ui/aura", "+ui/base", "+ui/gfx", diff --git a/ui/shell_dialogs/select_file_dialog_mac.mm b/ui/shell_dialogs/select_file_dialog_mac.mm index 641fc2eada..a29c404701 100644 --- a/ui/shell_dialogs/select_file_dialog_mac.mm +++ b/ui/shell_dialogs/select_file_dialog_mac.mm @@ -266,7 +266,20 @@ void SelectFileDialogImpl::SelectFileImpl( type_map_[dialog] = type; if (type == SELECT_SAVEAS_FILE) { - [dialog setCanSelectHiddenExtension:YES]; + // When file extensions are hidden and removing the extension from + // the default filename gives one which still has an extension + // that OS X recognizes, it will get confused and think the user + // is trying to override the default extension. This happens with + // filenames like "foo.tar.gz" or "ball.of.tar.png". Work around + // this by never hiding extensions in that case. + base::FilePath::StringType penultimate_extension = + default_path.RemoveFinalExtension().FinalExtension(); + if (!penultimate_extension.empty() && + penultimate_extension.length() <= 5U) { + [dialog setExtensionHidden:NO]; + } else { + [dialog setCanSelectHiddenExtension:YES]; + } } else { NSOpenPanel* open_dialog = (NSOpenPanel*)dialog; diff --git a/ui/shell_dialogs/select_file_dialog_win.cc b/ui/shell_dialogs/select_file_dialog_win.cc index b285be5960..1f8e36458b 100644 --- a/ui/shell_dialogs/select_file_dialog_win.cc +++ b/ui/shell_dialogs/select_file_dialog_win.cc @@ -86,7 +86,7 @@ bool CallGetSaveFileName(OPENFILENAME* ofn) { // Distinguish directories from regular files. bool IsDirectory(const base::FilePath& path) { base::PlatformFileInfo file_info; - return file_util::GetFileInfo(path, &file_info) ? + return base::GetFileInfo(path, &file_info) ? file_info.is_directory : path.EndsWithSeparator(); } @@ -846,7 +846,7 @@ bool SelectFileDialogImpl::RunOpenMultiFileDialog( // We use OFN_NOCHANGEDIR so that the user can rename or delete the directory // without having to close Chrome first. ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER - | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT; + | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT | OFN_NOCHANGEDIR; if (!filter.empty()) { ofn.lpstrFilter = filter.c_str(); diff --git a/ui/shell_dialogs/shell_dialogs.target.darwin-arm.mk b/ui/shell_dialogs/shell_dialogs.target.darwin-arm.mk index c74e22f330..bcf0ad12f6 100644 --- a/ui/shell_dialogs/shell_dialogs.target.darwin-arm.mk +++ b/ui/shell_dialogs/shell_dialogs.target.darwin-arm.mk @@ -73,6 +73,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -82,9 +83,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSHELL_DIALOGS_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -186,6 +189,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -195,9 +199,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSHELL_DIALOGS_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ diff --git a/ui/shell_dialogs/shell_dialogs.target.darwin-mips.mk b/ui/shell_dialogs/shell_dialogs.target.darwin-mips.mk index 97715a7cbf..f7004952fc 100644 --- a/ui/shell_dialogs/shell_dialogs.target.darwin-mips.mk +++ b/ui/shell_dialogs/shell_dialogs.target.darwin-mips.mk @@ -72,6 +72,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -81,9 +82,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSHELL_DIALOGS_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -184,6 +187,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -193,9 +197,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSHELL_DIALOGS_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ diff --git a/ui/shell_dialogs/shell_dialogs.target.darwin-x86.mk b/ui/shell_dialogs/shell_dialogs.target.darwin-x86.mk index e4e59fe68e..ef4383dc16 100644 --- a/ui/shell_dialogs/shell_dialogs.target.darwin-x86.mk +++ b/ui/shell_dialogs/shell_dialogs.target.darwin-x86.mk @@ -75,6 +75,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -84,9 +85,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSHELL_DIALOGS_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -190,6 +193,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -199,9 +203,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSHELL_DIALOGS_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ diff --git a/ui/shell_dialogs/shell_dialogs.target.linux-arm.mk b/ui/shell_dialogs/shell_dialogs.target.linux-arm.mk index c74e22f330..bcf0ad12f6 100644 --- a/ui/shell_dialogs/shell_dialogs.target.linux-arm.mk +++ b/ui/shell_dialogs/shell_dialogs.target.linux-arm.mk @@ -73,6 +73,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -82,9 +83,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSHELL_DIALOGS_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -186,6 +189,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -195,9 +199,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSHELL_DIALOGS_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ diff --git a/ui/shell_dialogs/shell_dialogs.target.linux-mips.mk b/ui/shell_dialogs/shell_dialogs.target.linux-mips.mk index 97715a7cbf..f7004952fc 100644 --- a/ui/shell_dialogs/shell_dialogs.target.linux-mips.mk +++ b/ui/shell_dialogs/shell_dialogs.target.linux-mips.mk @@ -72,6 +72,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -81,9 +82,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSHELL_DIALOGS_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -184,6 +187,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -193,9 +197,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSHELL_DIALOGS_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ diff --git a/ui/shell_dialogs/shell_dialogs.target.linux-x86.mk b/ui/shell_dialogs/shell_dialogs.target.linux-x86.mk index e4e59fe68e..ef4383dc16 100644 --- a/ui/shell_dialogs/shell_dialogs.target.linux-x86.mk +++ b/ui/shell_dialogs/shell_dialogs.target.linux-x86.mk @@ -75,6 +75,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -84,9 +85,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSHELL_DIALOGS_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -190,6 +193,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -199,9 +203,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSHELL_DIALOGS_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ diff --git a/ui/snapshot/DEPS b/ui/snapshot/DEPS index a531974df4..f4c16623e5 100644 --- a/ui/snapshot/DEPS +++ b/ui/snapshot/DEPS @@ -1,7 +1,6 @@ include_rules = [ "+skia/ext", "+third_party/skia", - "+ui/android", "+ui/aura", "+ui/base", "+ui/compositor", diff --git a/ui/snapshot/snapshot.target.darwin-arm.mk b/ui/snapshot/snapshot.target.darwin-arm.mk index c2d9fd9b3a..22515753bc 100644 --- a/ui/snapshot/snapshot.target.darwin-arm.mk +++ b/ui/snapshot/snapshot.target.darwin-arm.mk @@ -64,6 +64,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -73,9 +74,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSNAPSHOT_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -104,9 +107,9 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(LOCAL_PATH)/ui \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ @@ -175,6 +178,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -184,9 +188,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSNAPSHOT_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -216,9 +222,9 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(LOCAL_PATH)/ui \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ diff --git a/ui/snapshot/snapshot.target.darwin-mips.mk b/ui/snapshot/snapshot.target.darwin-mips.mk index cbbbdcf9a8..c720c6ea1e 100644 --- a/ui/snapshot/snapshot.target.darwin-mips.mk +++ b/ui/snapshot/snapshot.target.darwin-mips.mk @@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -72,9 +73,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSNAPSHOT_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -103,9 +106,9 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(LOCAL_PATH)/ui \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ @@ -173,6 +176,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -182,9 +186,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSNAPSHOT_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -214,9 +220,9 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(LOCAL_PATH)/ui \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ diff --git a/ui/snapshot/snapshot.target.darwin-x86.mk b/ui/snapshot/snapshot.target.darwin-x86.mk index f553904b17..2be2e353c6 100644 --- a/ui/snapshot/snapshot.target.darwin-x86.mk +++ b/ui/snapshot/snapshot.target.darwin-x86.mk @@ -66,6 +66,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -75,9 +76,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSNAPSHOT_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -105,9 +108,9 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(LOCAL_PATH)/ui \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ @@ -179,6 +182,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -188,9 +192,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSNAPSHOT_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -219,9 +225,9 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(LOCAL_PATH)/ui \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ diff --git a/ui/snapshot/snapshot.target.linux-arm.mk b/ui/snapshot/snapshot.target.linux-arm.mk index c2d9fd9b3a..22515753bc 100644 --- a/ui/snapshot/snapshot.target.linux-arm.mk +++ b/ui/snapshot/snapshot.target.linux-arm.mk @@ -64,6 +64,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -73,9 +74,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSNAPSHOT_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -104,9 +107,9 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(LOCAL_PATH)/ui \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ @@ -175,6 +178,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -184,9 +188,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSNAPSHOT_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -216,9 +222,9 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(LOCAL_PATH)/ui \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ diff --git a/ui/snapshot/snapshot.target.linux-mips.mk b/ui/snapshot/snapshot.target.linux-mips.mk index cbbbdcf9a8..c720c6ea1e 100644 --- a/ui/snapshot/snapshot.target.linux-mips.mk +++ b/ui/snapshot/snapshot.target.linux-mips.mk @@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -72,9 +73,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSNAPSHOT_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -103,9 +106,9 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(LOCAL_PATH)/ui \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ @@ -173,6 +176,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -182,9 +186,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSNAPSHOT_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -214,9 +220,9 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(LOCAL_PATH)/ui \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ diff --git a/ui/snapshot/snapshot.target.linux-x86.mk b/ui/snapshot/snapshot.target.linux-x86.mk index f553904b17..2be2e353c6 100644 --- a/ui/snapshot/snapshot.target.linux-x86.mk +++ b/ui/snapshot/snapshot.target.linux-x86.mk @@ -66,6 +66,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -75,9 +76,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSNAPSHOT_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -105,9 +108,9 @@ MY_DEFS_Debug := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Debug := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(LOCAL_PATH)/ui \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ @@ -179,6 +182,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -188,9 +192,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSNAPSHOT_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -219,9 +225,9 @@ MY_DEFS_Release := \ # Include paths placed before CFLAGS/CPPFLAGS LOCAL_C_INCLUDES_Release := \ - $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \ + $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \ $(LOCAL_PATH)/ui \ $(LOCAL_PATH) \ $(LOCAL_PATH)/skia/config \ diff --git a/ui/surface/accelerated_surface_transformer_win_unittest.cc b/ui/surface/accelerated_surface_transformer_win_unittest.cc index 67460ad968..968720fe06 100644 --- a/ui/surface/accelerated_surface_transformer_win_unittest.cc +++ b/ui/surface/accelerated_surface_transformer_win_unittest.cc @@ -75,7 +75,7 @@ bool WritePNGFile(const SkBitmap& bitmap, const base::FilePath& file_path) { if (gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, discard_transparency, &png_data) && - file_util::CreateDirectory(file_path.DirName())) { + base::CreateDirectory(file_path.DirName())) { char* data = reinterpret_cast<char*>(&png_data[0]); int size = static_cast<int>(png_data.size()); return file_util::WriteFile(file_path, data, size) == size; diff --git a/ui/surface/surface.target.darwin-arm.mk b/ui/surface/surface.target.darwin-arm.mk index cfe6c7fd97..26bd403cfb 100644 --- a/ui/surface/surface.target.darwin-arm.mk +++ b/ui/surface/surface.target.darwin-arm.mk @@ -68,6 +68,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -77,9 +78,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSURFACE_IMPLEMENTATION' \ '-DMEDIA_DISABLE_LIBVPX' \ @@ -185,6 +188,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -194,9 +198,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSURFACE_IMPLEMENTATION' \ '-DMEDIA_DISABLE_LIBVPX' \ diff --git a/ui/surface/surface.target.darwin-mips.mk b/ui/surface/surface.target.darwin-mips.mk index 8e3eb6fa23..fe80f19a74 100644 --- a/ui/surface/surface.target.darwin-mips.mk +++ b/ui/surface/surface.target.darwin-mips.mk @@ -67,6 +67,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -76,9 +77,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSURFACE_IMPLEMENTATION' \ '-DMEDIA_DISABLE_LIBVPX' \ @@ -183,6 +186,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -192,9 +196,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSURFACE_IMPLEMENTATION' \ '-DMEDIA_DISABLE_LIBVPX' \ diff --git a/ui/surface/surface.target.darwin-x86.mk b/ui/surface/surface.target.darwin-x86.mk index af61877b35..e14a4ac428 100644 --- a/ui/surface/surface.target.darwin-x86.mk +++ b/ui/surface/surface.target.darwin-x86.mk @@ -70,6 +70,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -79,9 +80,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSURFACE_IMPLEMENTATION' \ '-DMEDIA_DISABLE_LIBVPX' \ @@ -189,6 +192,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -198,9 +202,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSURFACE_IMPLEMENTATION' \ '-DMEDIA_DISABLE_LIBVPX' \ diff --git a/ui/surface/surface.target.linux-arm.mk b/ui/surface/surface.target.linux-arm.mk index cfe6c7fd97..26bd403cfb 100644 --- a/ui/surface/surface.target.linux-arm.mk +++ b/ui/surface/surface.target.linux-arm.mk @@ -68,6 +68,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -77,9 +78,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSURFACE_IMPLEMENTATION' \ '-DMEDIA_DISABLE_LIBVPX' \ @@ -185,6 +188,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -194,9 +198,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSURFACE_IMPLEMENTATION' \ '-DMEDIA_DISABLE_LIBVPX' \ diff --git a/ui/surface/surface.target.linux-mips.mk b/ui/surface/surface.target.linux-mips.mk index 8e3eb6fa23..fe80f19a74 100644 --- a/ui/surface/surface.target.linux-mips.mk +++ b/ui/surface/surface.target.linux-mips.mk @@ -67,6 +67,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -76,9 +77,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSURFACE_IMPLEMENTATION' \ '-DMEDIA_DISABLE_LIBVPX' \ @@ -183,6 +186,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -192,9 +196,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSURFACE_IMPLEMENTATION' \ '-DMEDIA_DISABLE_LIBVPX' \ diff --git a/ui/surface/surface.target.linux-x86.mk b/ui/surface/surface.target.linux-x86.mk index af61877b35..e14a4ac428 100644 --- a/ui/surface/surface.target.linux-x86.mk +++ b/ui/surface/surface.target.linux-x86.mk @@ -70,6 +70,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -79,9 +80,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSURFACE_IMPLEMENTATION' \ '-DMEDIA_DISABLE_LIBVPX' \ @@ -189,6 +192,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -198,9 +202,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DSURFACE_IMPLEMENTATION' \ '-DMEDIA_DISABLE_LIBVPX' \ diff --git a/ui/surface/transport_dib_posix.cc b/ui/surface/transport_dib_posix.cc index cd9ac6266e..28095f2c94 100644 --- a/ui/surface/transport_dib_posix.cc +++ b/ui/surface/transport_dib_posix.cc @@ -13,7 +13,6 @@ #include "base/logging.h" #include "base/memory/scoped_ptr.h" #include "base/memory/shared_memory.h" -#include "base/posix/eintr_wrapper.h" #include "skia/ext/platform_canvas.h" TransportDIB::TransportDIB() diff --git a/ui/test/DEPS b/ui/test/DEPS index a88b0715d6..b51da65b02 100644 --- a/ui/test/DEPS +++ b/ui/test/DEPS @@ -1,5 +1,4 @@ include_rules = [ - "+ui/android", "+ui/base", "+ui/gfx", ] @@ -491,6 +491,9 @@ ], }], ['OS=="mac"', { + 'dependencies': [ + '../third_party/mozilla/mozilla.gyp:mozilla', + ], 'sources!': [ 'base/dragdrop/drag_utils.cc', 'base/dragdrop/drag_utils.h', @@ -634,9 +637,6 @@ 'target_name': 'ui_cocoa_third_party_toolkits', 'type': '<(component)', 'sources': [ - # Build Apple sample code - '../third_party/apple_sample_code/ImageAndTextCell.h', - '../third_party/apple_sample_code/ImageAndTextCell.m', # Build the necessary GTM sources '../third_party/GTM/AppKit/GTMFadeTruncatingTextFieldCell.h', '../third_party/GTM/AppKit/GTMFadeTruncatingTextFieldCell.m', @@ -659,18 +659,9 @@ '../third_party/GTM/Foundation/GTMNSNumber+64Bit.m', '../third_party/GTM/Foundation/GTMNSObject+KeyValueObserving.h', '../third_party/GTM/Foundation/GTMNSObject+KeyValueObserving.m', - # MolokoCacao additions - '../third_party/molokocacao/NSBezierPath+MCAdditions.h', - '../third_party/molokocacao/NSBezierPath+MCAdditions.m', - # Build necessary Mozilla sources - '../third_party/mozilla/NSScreen+Utils.h', - '../third_party/mozilla/NSScreen+Utils.m', - '../third_party/mozilla/NSWorkspace+Utils.h', - '../third_party/mozilla/NSWorkspace+Utils.m', ], 'include_dirs': [ '..', - '../third_party/apple', '../third_party/GTM', '../third_party/GTM/AppKit', '../third_party/GTM/DebugUtils', diff --git a/ui/ui.target.darwin-arm.mk b/ui/ui.target.darwin-arm.mk index 061b104da8..23a6396916 100644 --- a/ui/ui.target.darwin-arm.mk +++ b/ui/ui.target.darwin-arm.mk @@ -110,6 +110,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -119,9 +120,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DUI_IMPLEMENTATION' \ '-DPOSIX_AVOID_MMAP' \ @@ -228,6 +231,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -237,9 +241,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DUI_IMPLEMENTATION' \ '-DPOSIX_AVOID_MMAP' \ diff --git a/ui/ui.target.darwin-mips.mk b/ui/ui.target.darwin-mips.mk index 1b04eb02ee..7e47e6bba6 100644 --- a/ui/ui.target.darwin-mips.mk +++ b/ui/ui.target.darwin-mips.mk @@ -109,6 +109,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -118,9 +119,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DUI_IMPLEMENTATION' \ '-DPOSIX_AVOID_MMAP' \ @@ -226,6 +229,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -235,9 +239,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DUI_IMPLEMENTATION' \ '-DPOSIX_AVOID_MMAP' \ diff --git a/ui/ui.target.darwin-x86.mk b/ui/ui.target.darwin-x86.mk index 34cdcc09fd..48bb9828e6 100644 --- a/ui/ui.target.darwin-x86.mk +++ b/ui/ui.target.darwin-x86.mk @@ -112,6 +112,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -121,9 +122,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DUI_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -232,6 +235,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -241,9 +245,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DUI_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ diff --git a/ui/ui.target.linux-arm.mk b/ui/ui.target.linux-arm.mk index 061b104da8..23a6396916 100644 --- a/ui/ui.target.linux-arm.mk +++ b/ui/ui.target.linux-arm.mk @@ -110,6 +110,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -119,9 +120,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DUI_IMPLEMENTATION' \ '-DPOSIX_AVOID_MMAP' \ @@ -228,6 +231,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -237,9 +241,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DUI_IMPLEMENTATION' \ '-DPOSIX_AVOID_MMAP' \ diff --git a/ui/ui.target.linux-mips.mk b/ui/ui.target.linux-mips.mk index 1b04eb02ee..7e47e6bba6 100644 --- a/ui/ui.target.linux-mips.mk +++ b/ui/ui.target.linux-mips.mk @@ -109,6 +109,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -118,9 +119,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DUI_IMPLEMENTATION' \ '-DPOSIX_AVOID_MMAP' \ @@ -226,6 +229,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -235,9 +239,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DUI_IMPLEMENTATION' \ '-DPOSIX_AVOID_MMAP' \ diff --git a/ui/ui.target.linux-x86.mk b/ui/ui.target.linux-x86.mk index 34cdcc09fd..48bb9828e6 100644 --- a/ui/ui.target.linux-x86.mk +++ b/ui/ui.target.linux-x86.mk @@ -112,6 +112,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -121,9 +122,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DUI_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ @@ -232,6 +235,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -241,9 +245,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-DUI_IMPLEMENTATION' \ '-DSK_ENABLE_INST_COUNT=0' \ diff --git a/ui/ui_base_jni_headers.target.darwin-arm.mk b/ui/ui_base_jni_headers.target.darwin-arm.mk index 964b4c25b3..4b5cca197d 100644 --- a/ui/ui_base_jni_headers.target.darwin-arm.mk +++ b/ui/ui_base_jni_headers.target.darwin-arm.mk @@ -126,6 +126,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -135,9 +136,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -205,6 +208,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -214,9 +218,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/ui_base_jni_headers.target.darwin-mips.mk b/ui/ui_base_jni_headers.target.darwin-mips.mk index 34b810413d..192b12c967 100644 --- a/ui/ui_base_jni_headers.target.darwin-mips.mk +++ b/ui/ui_base_jni_headers.target.darwin-mips.mk @@ -125,6 +125,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -134,9 +135,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -203,6 +206,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -212,9 +216,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/ui_base_jni_headers.target.darwin-x86.mk b/ui/ui_base_jni_headers.target.darwin-x86.mk index 521f5fa641..584c1d7ef0 100644 --- a/ui/ui_base_jni_headers.target.darwin-x86.mk +++ b/ui/ui_base_jni_headers.target.darwin-x86.mk @@ -128,6 +128,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -137,9 +138,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -210,6 +213,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -219,9 +223,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/ui_base_jni_headers.target.linux-arm.mk b/ui/ui_base_jni_headers.target.linux-arm.mk index 964b4c25b3..4b5cca197d 100644 --- a/ui/ui_base_jni_headers.target.linux-arm.mk +++ b/ui/ui_base_jni_headers.target.linux-arm.mk @@ -126,6 +126,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -135,9 +136,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -205,6 +208,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -214,9 +218,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/ui_base_jni_headers.target.linux-mips.mk b/ui/ui_base_jni_headers.target.linux-mips.mk index 34b810413d..192b12c967 100644 --- a/ui/ui_base_jni_headers.target.linux-mips.mk +++ b/ui/ui_base_jni_headers.target.linux-mips.mk @@ -125,6 +125,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -134,9 +135,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -203,6 +206,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -212,9 +216,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/ui_base_jni_headers.target.linux-x86.mk b/ui/ui_base_jni_headers.target.linux-x86.mk index 521f5fa641..584c1d7ef0 100644 --- a/ui/ui_base_jni_headers.target.linux-x86.mk +++ b/ui/ui_base_jni_headers.target.linux-x86.mk @@ -128,6 +128,7 @@ MY_CFLAGS_Debug := \ MY_DEFS_Debug := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -137,9 +138,11 @@ MY_DEFS_Debug := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ @@ -210,6 +213,7 @@ MY_CFLAGS_Release := \ MY_DEFS_Release := \ '-DANGLE_DX11' \ + '-DV8_DEPRECATION_WARNINGS' \ '-D_FILE_OFFSET_BITS=64' \ '-DNO_TCMALLOC' \ '-DDISABLE_NACL' \ @@ -219,9 +223,11 @@ MY_DEFS_Release := \ '-DENABLE_CONFIGURATION_POLICY' \ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \ + '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \ '-DUSE_OPENSSL=1' \ '-DENABLE_EGLIMAGE=1' \ '-DCLD_VERSION=1' \ + '-DENABLE_PRINTING=1' \ '-DENABLE_MANAGED_USERS=1' \ '-D__STDC_CONSTANT_MACROS' \ '-D__STDC_FORMAT_MACROS' \ diff --git a/ui/views/accessibility/native_view_accessibility_win.cc b/ui/views/accessibility/native_view_accessibility_win.cc index f0f8e91e54..3e20cbbc4a 100644 --- a/ui/views/accessibility/native_view_accessibility_win.cc +++ b/ui/views/accessibility/native_view_accessibility_win.cc @@ -272,7 +272,7 @@ STDMETHODIMP NativeViewAccessibilityWin::accHitTest( } gfx::Point point(x_left, y_top); - View::ConvertPointToTarget(NULL, view_, &point); + View::ConvertPointFromScreen(view_, &point); // If the point is not inside this view, return false. if (!view_->HitTestPoint(point)) { diff --git a/ui/views/border.cc b/ui/views/border.cc index eacd7b1dc5..f347c2a836 100644 --- a/ui/views/border.cc +++ b/ui/views/border.cc @@ -8,6 +8,7 @@ #include "base/memory/scoped_ptr.h" #include "ui/gfx/canvas.h" #include "ui/views/painter.h" +#include "ui/views/view.h" namespace views { diff --git a/ui/views/border.h b/ui/views/border.h index 3f06f6c85f..2e9c56bf4b 100644 --- a/ui/views/border.h +++ b/ui/views/border.h @@ -8,11 +8,11 @@ #include "base/basictypes.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/gfx/insets.h" -#include "ui/views/view.h" #include "ui/views/views_export.h" namespace gfx{ class Canvas; +class Size; } namespace views { diff --git a/ui/views/bubble/bubble_border.cc b/ui/views/bubble/bubble_border.cc index 237d91608d..aa9064ee97 100644 --- a/ui/views/bubble/bubble_border.cc +++ b/ui/views/bubble/bubble_border.cc @@ -12,8 +12,10 @@ #include "ui/base/resource/resource_bundle.h" #include "ui/gfx/canvas.h" #include "ui/gfx/image/image_skia.h" +#include "ui/gfx/rect.h" #include "ui/gfx/skia_util.h" #include "ui/views/painter.h" +#include "ui/views/view.h" namespace views { diff --git a/ui/views/bubble/bubble_border.h b/ui/views/bubble/bubble_border.h index 720b86f703..4fb961e6fb 100644 --- a/ui/views/bubble/bubble_border.h +++ b/ui/views/bubble/bubble_border.h @@ -12,6 +12,7 @@ namespace gfx { class ImageSkia; +class Rect; } namespace views { diff --git a/ui/views/bubble/bubble_delegate.cc b/ui/views/bubble/bubble_delegate.cc index 8c305c8f1b..515c400526 100644 --- a/ui/views/bubble/bubble_delegate.cc +++ b/ui/views/bubble/bubble_delegate.cc @@ -174,8 +174,12 @@ void BubbleDelegateView::OnWidgetActivationChanged(Widget* widget, void BubbleDelegateView::OnWidgetBoundsChanged(Widget* widget, const gfx::Rect& new_bounds) { - if (move_with_anchor() && anchor_widget() == widget) - SizeToContents(); + if (anchor_widget() == widget) { + if (move_with_anchor()) + SizeToContents(); + else + GetWidget()->Close(); + } } View* BubbleDelegateView::GetAnchorView() const { diff --git a/ui/views/bubble/bubble_delegate_unittest.cc b/ui/views/bubble/bubble_delegate_unittest.cc index 4c720885f0..91049007f0 100644 --- a/ui/views/bubble/bubble_delegate_unittest.cc +++ b/ui/views/bubble/bubble_delegate_unittest.cc @@ -244,6 +244,20 @@ TEST_F(BubbleDelegateTest, NonClientHitTest) { } } +TEST_F(BubbleDelegateTest, CloseWhenAnchorWidgetBoundsChanged) { + scoped_ptr<Widget> anchor_widget(CreateTestWidget()); + BubbleDelegateView* bubble_delegate = new BubbleDelegateView( + anchor_widget->GetContentsView(), BubbleBorder::NONE); + Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); + test::TestWidgetObserver bubble_observer(bubble_widget); + EXPECT_FALSE(bubble_observer.widget_closed()); + + bubble_widget->Show(); + EXPECT_TRUE(bubble_widget->IsVisible()); + anchor_widget->SetBounds(gfx::Rect(10, 10, 100, 100)); + EXPECT_FALSE(bubble_widget->IsVisible()); +} + // This class provides functionality to verify that the BubbleView shows up // when we call BubbleDelegateView::StartFade(true) and is destroyed when we // call BubbleDelegateView::StartFade(false). diff --git a/ui/views/bubble/bubble_frame_view.cc b/ui/views/bubble/bubble_frame_view.cc index 37b6c26c7c..ec60210b34 100644 --- a/ui/views/bubble/bubble_frame_view.cc +++ b/ui/views/bubble/bubble_frame_view.cc @@ -287,11 +287,13 @@ void BubbleFrameView::MirrorArrowIfOffScreen( gfx::Rect mirror_bounds = bubble_border_->GetBounds(anchor_rect, client_size); // Restore the original arrow if mirroring doesn't show more of the bubble. + // Otherwise it should invoke parent's Layout() to layout the content based + // on the new bubble border. if (GetOffScreenLength(monitor_rect, mirror_bounds, vertical) >= GetOffScreenLength(monitor_rect, window_bounds, vertical)) bubble_border_->set_arrow(arrow); - else - SchedulePaint(); + else if (parent()) + parent()->Layout(); } } diff --git a/ui/views/bubble/tray_bubble_view.cc b/ui/views/bubble/tray_bubble_view.cc index cab704f5ab..9259489397 100644 --- a/ui/views/bubble/tray_bubble_view.cc +++ b/ui/views/bubble/tray_bubble_view.cc @@ -179,7 +179,7 @@ class TrayBubbleContentMask : public ui::LayerDelegate { explicit TrayBubbleContentMask(int corner_radius); virtual ~TrayBubbleContentMask(); - ui::Layer* layer() { return &layer_; } + void set_bounds(gfx::Rect bounds) { bounds_ = bounds; } // Overridden from LayerDelegate. virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE; @@ -187,25 +187,22 @@ class TrayBubbleContentMask : public ui::LayerDelegate { virtual base::Closure PrepareForLayerBoundsChange() OVERRIDE; private: - ui::Layer layer_; + gfx::Rect bounds_; SkScalar corner_radius_; DISALLOW_COPY_AND_ASSIGN(TrayBubbleContentMask); }; TrayBubbleContentMask::TrayBubbleContentMask(int corner_radius) - : layer_(ui::LAYER_TEXTURED), - corner_radius_(corner_radius) { - layer_.set_delegate(this); + : corner_radius_(corner_radius) { } TrayBubbleContentMask::~TrayBubbleContentMask() { - layer_.set_delegate(NULL); } void TrayBubbleContentMask::OnPaintLayer(gfx::Canvas* canvas) { SkPath path; - path.addRoundRect(gfx::RectToSkRect(gfx::Rect(layer()->bounds().size())), + path.addRoundRect(gfx::RectToSkRect(gfx::Rect(bounds_.size())), corner_radius_, corner_radius_); SkPaint paint; paint.setAlpha(255); @@ -325,6 +322,7 @@ TrayBubbleView::TrayBubbleView(gfx::NativeView parent_window, mouse_actively_entered_(false) { set_parent_window(parent_window); set_notify_enter_exit_on_child(true); + set_move_with_anchor(true); set_close_on_deactivate(init_params.close_on_deactivate); set_margins(gfx::Insets()); bubble_border_ = new TrayBubbleBorder(this, GetAnchorView(), params_); @@ -339,6 +337,10 @@ TrayBubbleView::TrayBubbleView(gfx::NativeView parent_window, TrayBubbleView::~TrayBubbleView() { mouse_watcher_.reset(); + + if (layer()->parent()->layer_mask_layer()) + layer()->parent()->layer_mask_layer()->set_delegate(NULL); + // Inform host items (models) that their views are being destroyed. if (delegate_) delegate_->BubbleViewDestroyed(); @@ -349,8 +351,11 @@ void TrayBubbleView::InitializeAndShowBubble() { SetAlignment(params_.arrow_alignment); bubble_border_->UpdateArrowOffset(); - if (get_use_acceleration_when_possible()) - layer()->parent()->SetMaskLayer(bubble_content_mask_->layer()); + if (get_use_acceleration_when_possible()) { + scoped_ptr<ui::Layer> mask_layer(new ui::Layer(ui::LAYER_TEXTURED)); + mask_layer->set_delegate(bubble_content_mask_.get()); + layer()->parent()->SetMaskLayer(mask_layer.Pass()); + } GetWidget()->Show(); UpdateBubble(); @@ -358,8 +363,11 @@ void TrayBubbleView::InitializeAndShowBubble() { void TrayBubbleView::UpdateBubble() { SizeToContents(); - if (get_use_acceleration_when_possible()) - bubble_content_mask_->layer()->SetBounds(layer()->bounds()); + if (get_use_acceleration_when_possible()) { + bubble_content_mask_->set_bounds(layer()->bounds()); + if (layer()->parent()->layer_mask_layer()) + layer()->parent()->layer_mask_layer()->SetBounds(layer()->bounds()); + } GetWidget()->GetRootView()->SchedulePaint(); } diff --git a/ui/views/controls/button/checkbox.cc b/ui/views/controls/button/checkbox.cc index 640568972f..6db5802c4e 100644 --- a/ui/views/controls/button/checkbox.cc +++ b/ui/views/controls/button/checkbox.cc @@ -8,6 +8,7 @@ #include "ui/base/accessibility/accessible_view_state.h" #include "ui/base/resource/resource_bundle.h" #include "ui/views/controls/button/label_button_border.h" +#include "ui/views/painter.h" namespace views { @@ -79,11 +80,13 @@ void Checkbox::SetChecked(bool checked) { void Checkbox::Layout() { LabelButton::Layout(); - // Construct a focus border that only surrounds the label area. + // Construct a focus painter that only surrounds the label area. gfx::Rect rect = label()->GetMirroredBounds(); rect.Inset(-2, 3); - set_focus_border(FocusBorder::CreateDashedFocusBorder( - rect.x(), rect.y(), width() - rect.right(), height() - rect.bottom())); + SetFocusPainter(Painter::CreateDashedFocusPainterWithInsets( + gfx::Insets(rect.y(), rect.x(), + height() - rect.bottom(), + width() - rect.right()))); } const char* Checkbox::GetClassName() const { diff --git a/ui/views/controls/button/custom_button.cc b/ui/views/controls/button/custom_button.cc index 4a15975d5b..2be2a2301e 100644 --- a/ui/views/controls/button/custom_button.cc +++ b/ui/views/controls/button/custom_button.cc @@ -9,6 +9,13 @@ #include "ui/events/keycodes/keyboard_codes.h" #include "ui/gfx/animation/throb_animation.h" #include "ui/gfx/screen.h" +#include "ui/views/controls/button/blue_button.h" +#include "ui/views/controls/button/checkbox.h" +#include "ui/views/controls/button/image_button.h" +#include "ui/views/controls/button/label_button.h" +#include "ui/views/controls/button/menu_button.h" +#include "ui/views/controls/button/radio_button.h" +#include "ui/views/controls/button/text_button.h" #include "ui/views/widget/widget.h" namespace views { @@ -22,6 +29,27 @@ const char CustomButton::kViewClassName[] = "CustomButton"; //////////////////////////////////////////////////////////////////////////////// // CustomButton, public: +// static +const CustomButton* CustomButton::AsCustomButton(const views::View* view) { + return AsCustomButton(const_cast<views::View*>(view)); +} + +CustomButton* CustomButton::AsCustomButton(views::View* view) { + if (view) { + const char* classname = view->GetClassName(); + if (!strcmp(classname, Checkbox::kViewClassName) || + !strcmp(classname, CustomButton::kViewClassName) || + !strcmp(classname, ImageButton::kViewClassName) || + !strcmp(classname, LabelButton::kViewClassName) || + !strcmp(classname, RadioButton::kViewClassName) || + !strcmp(classname, MenuButton::kViewClassName) || + !strcmp(classname, TextButton::kViewClassName)) { + return static_cast<CustomButton*>(view); + } + } + return NULL; +} + CustomButton::~CustomButton() { } @@ -201,8 +229,9 @@ void CustomButton::OnGestureEvent(ui::GestureEvent* event) { if (event->type() == ui::ET_GESTURE_TAP && IsTriggerableEvent(*event)) { // Set the button state to hot and start the animation fully faded in. The - // TAP_UP event issued immediately after will set the state to STATE_NORMAL - // beginning the fade out animation. See http://crbug.com/131184. + // GESTURE_END event issued immediately after will set the state to + // STATE_NORMAL beginning the fade out animation. See + // http://crbug.com/131184. SetState(STATE_HOVERED); hover_animation_->Reset(1.0); NotifyClick(*event); @@ -213,7 +242,8 @@ void CustomButton::OnGestureEvent(ui::GestureEvent* event) { if (request_focus_on_press_) RequestFocus(); event->StopPropagation(); - } else { + } else if (event->type() == ui::ET_GESTURE_TAP_CANCEL || + event->type() == ui::ET_GESTURE_END) { SetState(STATE_NORMAL); } if (!event->handled()) diff --git a/ui/views/controls/button/custom_button.h b/ui/views/controls/button/custom_button.h index ecb49f60a3..c769d1b7b5 100644 --- a/ui/views/controls/button/custom_button.h +++ b/ui/views/controls/button/custom_button.h @@ -29,6 +29,9 @@ class VIEWS_EXPORT CustomButton : public Button, // The menu button's class name. static const char kViewClassName[]; + static const CustomButton* AsCustomButton(const views::View* view); + static CustomButton* AsCustomButton(views::View* view); + virtual ~CustomButton(); // Get/sets the current display state of the button. diff --git a/ui/views/controls/button/custom_button_unittest.cc b/ui/views/controls/button/custom_button_unittest.cc index 061bbd6826..f7b11e648e 100644 --- a/ui/views/controls/button/custom_button_unittest.cc +++ b/ui/views/controls/button/custom_button_unittest.cc @@ -7,6 +7,13 @@ #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/layout.h" #include "ui/gfx/screen.h" +#include "ui/views/controls/button/checkbox.h" +#include "ui/views/controls/button/image_button.h" +#include "ui/views/controls/button/menu_button.h" +#include "ui/views/controls/button/radio_button.h" +#include "ui/views/controls/button/text_button.h" +#include "ui/views/controls/link.h" +#include "ui/views/controls/textfield/textfield.h" #include "ui/views/test/views_test_base.h" #if defined(USE_AURA) @@ -31,6 +38,16 @@ class TestCustomButton : public CustomButton { DISALLOW_COPY_AND_ASSIGN(TestCustomButton); }; +#if defined(USE_AURA) +void PerformGesture(CustomButton* button, ui::EventType event_type) { + ui::GestureEventDetails gesture_details(event_type, 0, 0); + base::TimeDelta time_stamp = base::TimeDelta::FromMicroseconds(0); + ui::GestureEvent gesture_event(gesture_details.type(), 0, 0, 0, time_stamp, + gesture_details, 1); + button->OnGestureEvent(&gesture_event); +} +#endif // USE_AURA + } // namespace typedef ViewsTestBase CustomButtonTest; @@ -101,4 +118,66 @@ TEST_F(CustomButtonTest, HoverStateOnVisibilityChange) { #endif } +#if defined(USE_AURA) +// Tests that gesture events correctly change the button state. +TEST_F(CustomButtonTest, GestureEventsSetState) { + // Create a widget so that the CustomButton can query the hover state + // correctly. + scoped_ptr<Widget> widget(new Widget); + Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); + params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; + params.bounds = gfx::Rect(0, 0, 650, 650); + widget->Init(params); + widget->Show(); + + aura::test::TestCursorClient cursor_client( + widget->GetNativeView()->GetRootWindow()); + + TestCustomButton* button = new TestCustomButton(NULL); + widget->SetContentsView(button); + + EXPECT_EQ(CustomButton::STATE_NORMAL, button->state()); + + PerformGesture(button, ui::ET_GESTURE_TAP_DOWN); + EXPECT_EQ(CustomButton::STATE_PRESSED, button->state()); + + PerformGesture(button, ui::ET_GESTURE_SHOW_PRESS); + EXPECT_EQ(CustomButton::STATE_PRESSED, button->state()); + + PerformGesture(button, ui::ET_GESTURE_TAP_CANCEL); + EXPECT_EQ(CustomButton::STATE_NORMAL, button->state()); +} + +#endif // USE_AURA + +// Make sure all subclasses of CustomButton are correctly recognized +// as CustomButton. +TEST_F(CustomButtonTest, AsCustomButton) { + string16 text; + + TextButton text_button(NULL, text); + EXPECT_TRUE(CustomButton::AsCustomButton(&text_button)); + + ImageButton image_button(NULL); + EXPECT_TRUE(CustomButton::AsCustomButton(&image_button)); + + Checkbox checkbox(text); + EXPECT_TRUE(CustomButton::AsCustomButton(&checkbox)); + + RadioButton radio_button(text, 0); + EXPECT_TRUE(CustomButton::AsCustomButton(&radio_button)); + + MenuButton menu_button(NULL, text, NULL, false); + EXPECT_TRUE(CustomButton::AsCustomButton(&menu_button)); + + Label label; + EXPECT_FALSE(CustomButton::AsCustomButton(&label)); + + Link link(text); + EXPECT_FALSE(CustomButton::AsCustomButton(&link)); + + Textfield textfield(Textfield::STYLE_DEFAULT); + EXPECT_FALSE(CustomButton::AsCustomButton(&textfield)); +} + } // namespace views diff --git a/ui/views/controls/button/image_button.cc b/ui/views/controls/button/image_button.cc index 3811916d32..6a842346d2 100644 --- a/ui/views/controls/button/image_button.cc +++ b/ui/views/controls/button/image_button.cc @@ -10,6 +10,7 @@ #include "ui/gfx/canvas.h" #include "ui/gfx/image/image_skia_operations.h" #include "ui/gfx/scoped_canvas.h" +#include "ui/views/painter.h" #include "ui/views/widget/widget.h" namespace views { @@ -27,7 +28,8 @@ ImageButton::ImageButton(ButtonListener* listener) h_alignment_(ALIGN_LEFT), v_alignment_(ALIGN_TOP), preferred_size_(kDefaultWidth, kDefaultHeight), - draw_image_mirrored_(false) { + draw_image_mirrored_(false), + focus_painter_(Painter::CreateDashedFocusPainter()) { // By default, we request that the gfx::Canvas passed to our View::OnPaint() // implementation is flipped horizontally so that the button's images are // mirrored when the UI directionality is right-to-left. @@ -73,6 +75,10 @@ void ImageButton::SetImageAlignment(HorizontalAlignment h_align, SchedulePaint(); } +void ImageButton::SetFocusPainter(scoped_ptr<Painter> focus_painter) { + focus_painter_ = focus_painter.Pass(); +} + //////////////////////////////////////////////////////////////////////////////// // ImageButton, View overrides: @@ -114,12 +120,25 @@ void ImageButton::OnPaint(gfx::Canvas* canvas) { if (!overlay_image_.isNull()) canvas->DrawImageInt(overlay_image_, position.x(), position.y()); } - OnPaintFocusBorder(canvas); + + Painter::PaintFocusPainter(this, canvas, focus_painter()); } //////////////////////////////////////////////////////////////////////////////// // ImageButton, protected: +void ImageButton::OnFocus() { + View::OnFocus(); + if (focus_painter_.get()) + SchedulePaint(); +} + +void ImageButton::OnBlur() { + View::OnBlur(); + if (focus_painter_.get()) + SchedulePaint(); +} + gfx::ImageSkia ImageButton::GetImageToPaint() { gfx::ImageSkia img; diff --git a/ui/views/controls/button/image_button.h b/ui/views/controls/button/image_button.h index dd6b4612bb..d74eceb130 100644 --- a/ui/views/controls/button/image_button.h +++ b/ui/views/controls/button/image_button.h @@ -13,6 +13,8 @@ namespace views { +class Painter; + // An image button. // Note that this type of button is not focusable by default and will not be @@ -57,10 +59,7 @@ class VIEWS_EXPORT ImageButton : public CustomButton { void SetImageAlignment(HorizontalAlignment h_align, VerticalAlignment v_align); - // Overridden from View: - virtual gfx::Size GetPreferredSize() OVERRIDE; - virtual const char* GetClassName() const OVERRIDE; - virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; + void SetFocusPainter(scoped_ptr<Painter> focus_painter); // Sets preferred size, so it could be correctly positioned in layout even if // it is NULL. @@ -73,7 +72,16 @@ class VIEWS_EXPORT ImageButton : public CustomButton { draw_image_mirrored_ = mirrored; } + // Overridden from View: + virtual gfx::Size GetPreferredSize() OVERRIDE; + virtual const char* GetClassName() const OVERRIDE; + virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; + protected: + // Overridden from View: + virtual void OnFocus() OVERRIDE; + virtual void OnBlur() OVERRIDE; + // Returns the image to paint. This is invoked from paint and returns a value // from images. virtual gfx::ImageSkia GetImageToPaint(); @@ -81,6 +89,8 @@ class VIEWS_EXPORT ImageButton : public CustomButton { // Updates button background for |scale_factor|. void UpdateButtonBackground(ui::ScaleFactor scale_factor); + Painter* focus_painter() { return focus_painter_.get(); } + // The images used to render the different states of this button. gfx::ImageSkia images_[STATE_COUNT]; @@ -109,6 +119,8 @@ class VIEWS_EXPORT ImageButton : public CustomButton { // resources. bool draw_image_mirrored_; + scoped_ptr<Painter> focus_painter_; + DISALLOW_COPY_AND_ASSIGN(ImageButton); }; diff --git a/ui/views/controls/button/image_button_unittest.cc b/ui/views/controls/button/image_button_unittest.cc index dd57f6b53d..995b2056de 100644 --- a/ui/views/controls/button/image_button_unittest.cc +++ b/ui/views/controls/button/image_button_unittest.cc @@ -4,6 +4,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/layout.h" +#include "ui/views/border.h" #include "ui/views/controls/button/image_button.h" #include "ui/views/test/views_test_base.h" diff --git a/ui/views/controls/button/label_button.cc b/ui/views/controls/button/label_button.cc index 243e92fffb..58e3fe6879 100644 --- a/ui/views/controls/button/label_button.cc +++ b/ui/views/controls/button/label_button.cc @@ -11,7 +11,7 @@ #include "ui/gfx/sys_color_change_listener.h" #include "ui/native_theme/native_theme.h" #include "ui/views/controls/button/label_button_border.h" -#include "ui/views/focus_border.h" +#include "ui/views/painter.h" #include "ui/views/window/dialog_delegate.h" #if defined(OS_WIN) @@ -23,9 +23,6 @@ namespace { // The spacing between the icon and text. const int kSpacing = 5; -// The length of the hover fade animation. -const int kHoverAnimationDurationMs = 170; - // Default text and shadow colors for STYLE_BUTTON. const SkColor kStyleButtonTextColor = SK_ColorBLACK; const SkColor kStyleButtonShadowColor = SK_ColorWHITE; @@ -35,6 +32,9 @@ const SkColor kStyleButtonShadowColor = SK_ColorWHITE; namespace views { // static +const int LabelButton::kHoverAnimationDurationMs = 170; + +// static const char LabelButton::kViewClassName[] = "LabelButton"; LabelButton::LabelButton(ButtonListener* listener, const string16& text) @@ -146,8 +146,12 @@ void LabelButton::SetStyle(ButtonStyle style) { style_ = style; set_border(new LabelButtonBorder(style)); // Inset the button focus rect from the actual border; roughly match Windows. - set_focus_border(style == STYLE_BUTTON ? - NULL : FocusBorder::CreateDashedFocusBorder(3, 3, 3, 3)); + if (style == STYLE_BUTTON) { + SetFocusPainter(scoped_ptr<Painter>()); + } else { + SetFocusPainter(Painter::CreateDashedFocusPainterWithInsets( + gfx::Insets(3, 3, 3, 3))); + } if (style == STYLE_BUTTON || style == STYLE_NATIVE_TEXTBUTTON) { label_->SetHorizontalAlignment(gfx::ALIGN_CENTER); set_focusable(true); @@ -159,6 +163,10 @@ void LabelButton::SetStyle(ButtonStyle style) { ResetColorsFromNativeTheme(); } +void LabelButton::SetFocusPainter(scoped_ptr<Painter> focus_painter) { + focus_painter_ = focus_painter.Pass(); +} + gfx::Size LabelButton::GetPreferredSize() { // Use a temporary label copy for sizing to avoid calculation side-effects. gfx::Font font = GetFont(); @@ -254,6 +262,23 @@ const char* LabelButton::GetClassName() const { return kViewClassName; } +void LabelButton::OnPaint(gfx::Canvas* canvas) { + View::OnPaint(canvas); + Painter::PaintFocusPainter(this, canvas, focus_painter_.get()); +} + +void LabelButton::OnFocus() { + View::OnFocus(); + // Typically the border renders differently when focused. + SchedulePaint(); +} + +void LabelButton::OnBlur() { + View::OnBlur(); + // Typically the border renders differently when focused. + SchedulePaint(); +} + void LabelButton::GetExtraParams(ui::NativeTheme::ExtraParams* params) const { params->button.checked = false; params->button.indeterminate = false; diff --git a/ui/views/controls/button/label_button.h b/ui/views/controls/button/label_button.h index c69ea037b1..ad7e226ad5 100644 --- a/ui/views/controls/button/label_button.h +++ b/ui/views/controls/button/label_button.h @@ -6,6 +6,7 @@ #define UI_VIEWS_CONTROLS_BUTTON_LABEL_BUTTON_H_ #include "base/compiler_specific.h" +#include "base/memory/scoped_ptr.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/gfx/font.h" #include "ui/gfx/image/image_skia.h" @@ -16,10 +17,15 @@ namespace views { +class Painter; + // LabelButton is an alternative to TextButton, it's not focusable by default. class VIEWS_EXPORT LabelButton : public CustomButton, public NativeThemeDelegate { public: + // The length of the hover fade animation. + static const int kHoverAnimationDurationMs; + static const char kViewClassName[]; LabelButton(ButtonListener* listener, const string16& text); @@ -65,13 +71,21 @@ class VIEWS_EXPORT LabelButton : public CustomButton, ButtonStyle style() const { return style_; } void SetStyle(ButtonStyle style); - // Overridden from View: + void SetFocusPainter(scoped_ptr<Painter> focus_painter); + + // View: virtual gfx::Size GetPreferredSize() OVERRIDE; virtual void Layout() OVERRIDE; virtual const char* GetClassName() const OVERRIDE; protected: - Label* label() const { return label_; } + ImageView* image() const { return image_; } + Label* label() const { return label_; } + + // View: + virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; + virtual void OnFocus() OVERRIDE; + virtual void OnBlur() OVERRIDE; // Fill |params| with information about the button. virtual void GetExtraParams(ui::NativeTheme::ExtraParams* params) const; @@ -82,6 +96,9 @@ class VIEWS_EXPORT LabelButton : public CustomButton, // Updates the image view to contain the appropriate button state image. void UpdateImage(); + // NativeThemeDelegate: + virtual gfx::Rect GetThemePaintRect() const OVERRIDE; + private: FRIEND_TEST_ALL_PREFIXES(LabelButtonTest, Init); FRIEND_TEST_ALL_PREFIXES(LabelButtonTest, Label); @@ -89,16 +106,15 @@ class VIEWS_EXPORT LabelButton : public CustomButton, FRIEND_TEST_ALL_PREFIXES(LabelButtonTest, LabelAndImage); FRIEND_TEST_ALL_PREFIXES(LabelButtonTest, Font); - // Overridden from CustomButton: + // CustomButton: virtual void StateChanged() OVERRIDE; - // Overridden from View: + // View: virtual void ChildPreferredSizeChanged(View* child) OVERRIDE; virtual void OnNativeThemeChanged(const ui::NativeTheme* theme) OVERRIDE; - // Overridden from NativeThemeDelegate: + // NativeThemeDelegate: virtual ui::NativeTheme::Part GetThemePart() const OVERRIDE; - virtual gfx::Rect GetThemePaintRect() const OVERRIDE; virtual ui::NativeTheme::State GetThemeState( ui::NativeTheme::ExtraParams* params) const OVERRIDE; virtual const gfx::Animation* GetThemeAnimation() const OVERRIDE; @@ -131,6 +147,8 @@ class VIEWS_EXPORT LabelButton : public CustomButton, // The button's overall style. ButtonStyle style_; + scoped_ptr<Painter> focus_painter_; + DISALLOW_COPY_AND_ASSIGN(LabelButton); }; diff --git a/ui/views/controls/button/label_button_border.cc b/ui/views/controls/button/label_button_border.cc index 8307505b2e..d124764fd7 100644 --- a/ui/views/controls/button/label_button_border.cc +++ b/ui/views/controls/button/label_button_border.cc @@ -15,6 +15,7 @@ #include "ui/gfx/skia_util.h" #include "ui/gfx/sys_color_change_listener.h" #include "ui/native_theme/native_theme.h" +#include "ui/views/border.h" #include "ui/views/controls/button/label_button.h" #include "ui/views/native_theme_delegate.h" @@ -58,7 +59,7 @@ void PaintHelper(LabelButtonBorder* border, if (!painter && extra.button.is_focused) painter = border->GetPainter(false, GetButtonState(state)); if (painter) - painter->Paint(canvas, rect.size()); + Painter::PaintPainterAt(canvas, painter, rect); } } @@ -147,11 +148,6 @@ void LabelButtonBorder::Paint(const View& view, gfx::Canvas* canvas) { rect.Inset(insets_); canvas->FillRect(rect, extra.button.background_color); } - - // Draw the Views focus border for the native theme style. - if (style() == Button::STYLE_NATIVE_TEXTBUTTON && - view.focus_border() && extra.button.is_focused) - view.focus_border()->Paint(view, canvas); } gfx::Insets LabelButtonBorder::GetInsets() const { diff --git a/ui/views/controls/button/text_button.cc b/ui/views/controls/button/text_button.cc index fcb0391087..e829405b9f 100644 --- a/ui/views/controls/button/text_button.cc +++ b/ui/views/controls/button/text_button.cc @@ -13,7 +13,7 @@ #include "ui/gfx/canvas.h" #include "ui/gfx/image/image.h" #include "ui/views/controls/button/button.h" -#include "ui/views/focus_border.h" +#include "ui/views/painter.h" #include "ui/views/widget/widget.h" #if defined(OS_WIN) @@ -37,12 +37,11 @@ const int kPreferredPaddingVertical = 5; const int kPreferredNativeThemePaddingHorizontal = 12; const int kPreferredNativeThemePaddingVertical = 5; -// By default the focus rect is drawn at the border of the view. -// For a button, we inset the focus rect by 3 pixels so that it -// doesn't draw on top of the button's border. This roughly matches -// how the Windows native focus rect for buttons looks. A subclass -// that draws a button with different padding may need to -// override OnPaintFocusBorder and do something different. +// By default the focus rect is drawn at the border of the view. For a button, +// we inset the focus rect by 3 pixels so that it doesn't draw on top of the +// button's border. This roughly matches how the Windows native focus rect for +// buttons looks. A subclass that draws a button with different padding may need +// to provide a different focus painter and do something different. const int kFocusRectInset = 3; // How long the hover fade animation should last. @@ -218,7 +217,8 @@ TextButtonBase::TextButtonBase(ButtonListener* listener, const string16& text) use_enabled_color_from_theme_(true), use_disabled_color_from_theme_(true), use_highlight_color_from_theme_(true), - use_hover_color_from_theme_(true) { + use_hover_color_from_theme_(true), + focus_painter_(Painter::CreateDashedFocusPainter()) { SetText(text); // OnNativeThemeChanged sets the color member variables. TextButtonBase::OnNativeThemeChanged(GetNativeTheme()); @@ -407,6 +407,18 @@ int TextButtonBase::ComputeCanvasStringFlags() const { return flags; } +void TextButtonBase::OnFocus() { + View::OnFocus(); + if (focus_painter_) + SchedulePaint(); +} + +void TextButtonBase::OnBlur() { + View::OnBlur(); + if (focus_painter_) + SchedulePaint(); +} + void TextButtonBase::GetExtraParams( ui::NativeTheme::ExtraParams* params) const { params->button.checked = false; @@ -452,11 +464,15 @@ gfx::Rect TextButtonBase::GetTextBounds() const { return GetContentBounds(0); } +void TextButtonBase::SetFocusPainter(scoped_ptr<Painter> focus_painter) { + focus_painter_ = focus_painter.Pass(); +} + void TextButtonBase::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) { if (mode == PB_NORMAL) { OnPaintBackground(canvas); OnPaintBorder(canvas); - OnPaintFocusBorder(canvas); + Painter::PaintFocusPainter(this, canvas, focus_painter_.get()); } gfx::Rect text_bounds(GetTextBounds()); @@ -601,10 +617,9 @@ TextButton::TextButton(ButtonListener* listener, const string16& text) icon_text_spacing_(kDefaultIconTextSpacing), ignore_minimum_size_(true) { set_border(new TextButtonDefaultBorder); - set_focus_border(FocusBorder::CreateDashedFocusBorder(kFocusRectInset, - kFocusRectInset, - kFocusRectInset, - kFocusRectInset)); + SetFocusPainter(Painter::CreateDashedFocusPainterWithInsets( + gfx::Insets(kFocusRectInset, kFocusRectInset, + kFocusRectInset, kFocusRectInset))); } TextButton::~TextButton() { diff --git a/ui/views/controls/button/text_button.h b/ui/views/controls/button/text_button.h index 49f12c681d..18d2ba2721 100644 --- a/ui/views/controls/button/text_button.h +++ b/ui/views/controls/button/text_button.h @@ -166,6 +166,9 @@ class VIEWS_EXPORT TextButtonBase : public CustomButton, bool show_multiple_icon_states() const { return show_multiple_icon_states_; } void SetShowMultipleIconStates(bool show_multiple_icon_states); + void SetFocusPainter(scoped_ptr<Painter> focus_painter); + Painter* focus_painter() { return focus_painter_.get(); } + // Paint the button into the specified canvas. If |mode| is |PB_FOR_DRAG|, the // function paints a drag image representation into the canvas. enum PaintButtonMode { PB_NORMAL, PB_FOR_DRAG }; @@ -221,6 +224,10 @@ class VIEWS_EXPORT TextButtonBase : public CustomButton, virtual ui::NativeTheme::State GetForegroundThemeState( ui::NativeTheme::ExtraParams* params) const OVERRIDE; + // Overridden from View: + virtual void OnFocus() OVERRIDE; + virtual void OnBlur() OVERRIDE; + virtual void GetExtraParams(ui::NativeTheme::ExtraParams* params) const; virtual gfx::Rect GetTextBounds() const; @@ -289,6 +296,8 @@ class VIEWS_EXPORT TextButtonBase : public CustomButton, bool use_highlight_color_from_theme_; bool use_hover_color_from_theme_; + scoped_ptr<Painter> focus_painter_; + DISALLOW_COPY_AND_ASSIGN(TextButtonBase); }; diff --git a/ui/views/controls/combobox/combobox.cc b/ui/views/controls/combobox/combobox.cc index 2600b174f0..41e9938461 100644 --- a/ui/views/controls/combobox/combobox.cc +++ b/ui/views/controls/combobox/combobox.cc @@ -12,16 +12,24 @@ #include "ui/base/resource/resource_bundle.h" #include "ui/events/event.h" #include "ui/events/keycodes/keyboard_codes.h" +#include "ui/gfx/animation/throb_animation.h" #include "ui/gfx/canvas.h" +#include "ui/gfx/image/image.h" +#include "ui/gfx/scoped_canvas.h" #include "ui/native_theme/native_theme.h" +#include "ui/views/background.h" #include "ui/views/color_constants.h" +#include "ui/views/controls/button/custom_button.h" +#include "ui/views/controls/button/label_button.h" #include "ui/views/controls/combobox/combobox_listener.h" #include "ui/views/controls/focusable_border.h" #include "ui/views/controls/menu/menu_runner.h" +#include "ui/views/controls/menu/menu_runner_handler.h" #include "ui/views/controls/menu/submenu_view.h" #include "ui/views/controls/prefix_selector.h" #include "ui/views/ime/input_method.h" #include "ui/views/mouse_constants.h" +#include "ui/views/painter.h" #include "ui/views/widget/widget.h" namespace views { @@ -39,6 +47,8 @@ const int kMinComboboxWidth = 25; // Size of the combobox arrow margins const int kDisclosureArrowLeftPadding = 7; const int kDisclosureArrowRightPadding = 7; +const int kDisclosureArrowButtonLeftPadding = 11; +const int kDisclosureArrowButtonRightPadding = 12; // Define the id of the first item in the menu (since it needs to be > 0) const int kFirstMenuItemId = 1000; @@ -48,6 +58,19 @@ const SkColor kInvalidTextColor = SK_ColorWHITE; // Used to indicate that no item is currently selected by the user. const int kNoSelection = -1; +const int kBodyButtonImages[] = IMAGE_GRID(IDR_COMBOBOX_BUTTON); +const int kHoveredBodyButtonImages[] = IMAGE_GRID(IDR_COMBOBOX_BUTTON_H); +const int kPressedBodyButtonImages[] = IMAGE_GRID(IDR_COMBOBOX_BUTTON_P); + +#define MENU_IMAGE_GRID(x) { \ + x ## _MENU_TOP, x ## _MENU_CENTER, x ## _MENU_BOTTOM, } + +const int kMenuButtonImages[] = MENU_IMAGE_GRID(IDR_COMBOBOX_BUTTON); +const int kHoveredMenuButtonImages[] = MENU_IMAGE_GRID(IDR_COMBOBOX_BUTTON_H); +const int kPressedMenuButtonImages[] = MENU_IMAGE_GRID(IDR_COMBOBOX_BUTTON_P); + +#undef MENU_IMAGE_GRID + // The background to use for invalid comboboxes. class InvalidBackground : public Background { public: @@ -66,6 +89,23 @@ class InvalidBackground : public Background { DISALLOW_COPY_AND_ASSIGN(InvalidBackground); }; +// The transparent button which holds a button state but is not rendered. +class TransparentButton : public CustomButton { + public: + TransparentButton(ButtonListener* listener) + : CustomButton(listener) { + SetAnimationDuration(LabelButton::kHoverAnimationDurationMs); + } + virtual ~TransparentButton() {} + + double GetAnimationValue() const { + return hover_animation_->GetCurrentValue(); + } + + private: + DISALLOW_COPY_AND_ASSIGN(TransparentButton); +}; + // Returns the next or previous valid index (depending on |increment|'s value). // Skips separator or disabled indices. Returns -1 if there is no valid adjacent // index. @@ -81,6 +121,102 @@ int GetAdjacentIndex(ui::ComboboxModel* model, int increment, int index) { return kNoSelection; } +// Returns the image resource ids of an array for the body button. +// +// TODO(hajimehoshi): This function should return the images for the 'disabled' +// status. (crbug/270052) +// +// TODO(hajimehoshi): Currently, |focused| is ignored. This should return the +// images for the 'focused' status. (crbug/270052) +const int* GetBodyButtonImageIds(bool focused, + Button::ButtonState state, + size_t* num) { + DCHECK(num); + *num = 9; + switch (state) { + case Button::STATE_DISABLED: + return kBodyButtonImages; + case Button::STATE_NORMAL: + return kBodyButtonImages; + case Button::STATE_HOVERED: + return kHoveredBodyButtonImages; + case Button::STATE_PRESSED: + return kPressedBodyButtonImages; + default: + NOTREACHED(); + } + return NULL; +} + +// Returns the image resource ids of an array for the menu button. +const int* GetMenuButtonImageIds(bool focused, + Button::ButtonState state, + size_t* num) { + DCHECK(num); + *num = 3; + switch (state) { + case Button::STATE_DISABLED: + return kMenuButtonImages; + case Button::STATE_NORMAL: + return kMenuButtonImages; + case Button::STATE_HOVERED: + return kHoveredMenuButtonImages; + case Button::STATE_PRESSED: + return kPressedMenuButtonImages; + default: + NOTREACHED(); + } + return NULL; +} + +// Returns the images for the menu buttons. +std::vector<const gfx::ImageSkia*> GetMenuButtonImages( + bool focused, + Button::ButtonState state) { + const int* ids; + size_t num_ids; + ids = GetMenuButtonImageIds(focused, state, &num_ids); + std::vector<const gfx::ImageSkia*> images; + images.reserve(num_ids); + ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); + for (size_t i = 0; i < num_ids; i++) + images.push_back(rb.GetImageSkiaNamed(ids[i])); + return images; +} + +// Paints three images in a column at the given location. The center image is +// stretched so as to fit the given height. +void PaintImagesVertically(gfx::Canvas* canvas, + const gfx::ImageSkia& top_image, + const gfx::ImageSkia& center_image, + const gfx::ImageSkia& bottom_image, + int x, int y, int width, int height) { + canvas->DrawImageInt(top_image, + 0, 0, top_image.width(), top_image.height(), + x, y, width, top_image.height(), false); + y += top_image.height(); + int center_height = height - top_image.height() - bottom_image.height(); + canvas->DrawImageInt(center_image, + 0, 0, center_image.width(), center_image.height(), + x, y, width, center_height, false); + y += center_height; + canvas->DrawImageInt(bottom_image, + 0, 0, bottom_image.width(), bottom_image.height(), + x, y, width, bottom_image.height(), false); +} + +// Paints the arrow button. +void PaintArrowButton( + gfx::Canvas* canvas, + const std::vector<const gfx::ImageSkia*>& arrow_button_images, + int x, int height) { + PaintImagesVertically(canvas, + *arrow_button_images[0], + *arrow_button_images[1], + *arrow_button_images[2], + x, 0, arrow_button_images[0]->width(), height); +} + } // namespace // static @@ -91,17 +227,46 @@ const char Combobox::kViewClassName[] = "views/Combobox"; Combobox::Combobox(ui::ComboboxModel* model) : model_(model), + style_(STYLE_SHOW_DROP_DOWN_ON_CLICK), listener_(NULL), selected_index_(model_->GetDefaultIndex()), invalid_(false), - text_border_(new FocusableBorder()), disclosure_arrow_(ui::ResourceBundle::GetSharedInstance().GetImageNamed( IDR_MENU_DROPARROW).ToImageSkia()), - dropdown_open_(false) { + dropdown_open_(false), + text_button_(new TransparentButton(this)), + arrow_button_(new TransparentButton(this)) { model_->AddObserver(this); UpdateFromModel(); set_focusable(true); - set_border(text_border_); + UpdateBorder(); + + // Initialize the button images. + Button::ButtonState button_states[] = { + Button::STATE_DISABLED, + Button::STATE_NORMAL, + Button::STATE_HOVERED, + Button::STATE_PRESSED, + }; + for (int i = 0; i < 2; i++) { + for (size_t state_index = 0; state_index < arraysize(button_states); + state_index++) { + Button::ButtonState state = button_states[state_index]; + size_t num; + bool focused = !!i; + const int* ids = GetBodyButtonImageIds(focused, state, &num); + body_button_painters_[focused][state].reset( + Painter::CreateImageGridPainter(ids)); + menu_button_images_[focused][state] = GetMenuButtonImages(focused, state); + } + } + + text_button_->SetVisible(true); + arrow_button_->SetVisible(true); + text_button_->set_focusable(false); + arrow_button_->set_focusable(false); + AddChildView(text_button_); + AddChildView(arrow_button_); } Combobox::~Combobox() { @@ -114,6 +279,16 @@ const gfx::Font& Combobox::GetFont() { return rb.GetFont(ui::ResourceBundle::BaseFont); } +void Combobox::SetStyle(Style style) { + if (style_ == style) + return; + + style_ = style; + + UpdateBorder(); + PreferredSizeChanged(); +} + void Combobox::ModelChanged() { selected_index_ = std::min(0, model_->GetItemCount()); UpdateFromModel(); @@ -140,14 +315,14 @@ void Combobox::SetAccessibleName(const string16& name) { } void Combobox::SetInvalid(bool invalid) { + if (invalid == invalid_) + return; + invalid_ = invalid; - if (invalid) { - text_border_->SetColor(kWarningColor); - set_background(new InvalidBackground()); - } else { - text_border_->UseDefaultColor(); - set_background(NULL); - } + + set_background(invalid_ ? new InvalidBackground() : NULL); + UpdateBorder(); + SchedulePaint(); } ui::TextInputClient* Combobox::GetTextInputClient() { @@ -156,6 +331,30 @@ ui::TextInputClient* Combobox::GetTextInputClient() { return selector_.get(); } +void Combobox::Layout() { + PrefixDelegate::Layout(); + + gfx::Insets insets = GetInsets(); + int text_button_width = 0; + int arrow_button_width = 0; + + switch (style_) { + case STYLE_SHOW_DROP_DOWN_ON_CLICK: { + arrow_button_width = width(); + break; + } + case STYLE_NOTIFY_ON_CLICK: { + arrow_button_width = GetDisclosureArrowLeftPadding() + + disclosure_arrow_->width() + GetDisclosureArrowRightPadding(); + text_button_width = width() - arrow_button_width; + break; + } + } + + int arrow_button_x = std::max(0, text_button_width); + text_button_->SetBounds(0, 0, std::max(0, text_button_width), height()); + arrow_button_->SetBounds(arrow_button_x, 0, arrow_button_width, height()); +} bool Combobox::IsItemChecked(int id) const { return false; @@ -201,9 +400,8 @@ gfx::Size Combobox::GetPreferredSize() { // the minimum width for the dropdown list. gfx::Insets insets = GetInsets(); int total_width = std::max(kMinComboboxWidth, content_size_.width()) + - insets.width() + kDisclosureArrowLeftPadding + - disclosure_arrow_->width() + kDisclosureArrowRightPadding; - + insets.width() + GetDisclosureArrowLeftPadding() + + disclosure_arrow_->width() + GetDisclosureArrowRightPadding(); return gfx::Size(total_width, content_size_.height() + insets.height()); } @@ -220,22 +418,6 @@ bool Combobox::SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) { return dropdown_open_; } -bool Combobox::OnMousePressed(const ui::MouseEvent& mouse_event) { - RequestFocus(); - const base::TimeDelta delta = base::Time::Now() - closed_time_; - if (mouse_event.IsLeftMouseButton() && - (delta.InMilliseconds() > kMinimumMsBetweenButtonClicks)) { - UpdateFromModel(); - ShowDropDownMenu(ui::MENU_SOURCE_MOUSE); - } - - return true; -} - -bool Combobox::OnMouseDragged(const ui::MouseEvent& mouse_event) { - return true; -} - bool Combobox::OnKeyPressed(const ui::KeyEvent& e) { // TODO(oshima): handle IME. DCHECK_EQ(e.type(), ui::ET_KEY_PRESSED); @@ -280,6 +462,20 @@ bool Combobox::OnKeyPressed(const ui::KeyEvent& e) { new_index = GetAdjacentIndex(model(), -1, selected_index_); break; + // Click the button only when the button style mode. + case ui::VKEY_SPACE: + if (style_ == STYLE_NOTIFY_ON_CLICK) { + // When pressing space, the click event will be raised after the key is + // released. + text_button_->SetState(Button::STATE_PRESSED); + } + break; + + // Click the button only when the button style mode. + case ui::VKEY_RETURN: + HandleClickEvent(); + break; + default: return false; } @@ -297,36 +493,44 @@ bool Combobox::OnKeyPressed(const ui::KeyEvent& e) { } bool Combobox::OnKeyReleased(const ui::KeyEvent& e) { - return false; // crbug.com/127520 -} + if (style_ != STYLE_NOTIFY_ON_CLICK) + return false; // crbug.com/127520 -void Combobox::OnGestureEvent(ui::GestureEvent* gesture) { - if (gesture->type() == ui::ET_GESTURE_TAP) { - UpdateFromModel(); - ShowDropDownMenu(ui::MENU_SOURCE_TOUCH); - gesture->StopPropagation(); - return; - } - View::OnGestureEvent(gesture); + if (e.key_code() == ui::VKEY_SPACE) + HandleClickEvent(); + + return false; } void Combobox::OnPaint(gfx::Canvas* canvas) { - OnPaintBackground(canvas); - PaintText(canvas); - OnPaintBorder(canvas); + switch (style_) { + case STYLE_SHOW_DROP_DOWN_ON_CLICK: { + OnPaintBackground(canvas); + PaintText(canvas); + OnPaintBorder(canvas); + break; + } + case STYLE_NOTIFY_ON_CLICK: { + PaintButtons(canvas); + PaintText(canvas); + break; + } + } } void Combobox::OnFocus() { GetInputMethod()->OnFocus(); - text_border_->set_has_focus(true); View::OnFocus(); + // Border renders differently when focused. + SchedulePaint(); } void Combobox::OnBlur() { GetInputMethod()->OnBlur(); if (selector_) selector_->OnViewBlur(); - text_border_->set_has_focus(false); + // Border renders differently when focused. + SchedulePaint(); } void Combobox::GetAccessibleState(ui::AccessibleViewState* state) { @@ -341,6 +545,28 @@ void Combobox::OnModelChanged() { ModelChanged(); } +void Combobox::ButtonPressed(Button* sender, const ui::Event& event) { + RequestFocus(); + + if (sender == text_button_) { + HandleClickEvent(); + } else { + DCHECK_EQ(arrow_button_, sender); + // TODO(hajimehoshi): Fix the problem that the arrow button blinks when + // cliking this while the dropdown menu is opened. + const base::TimeDelta delta = base::Time::Now() - closed_time_; + if (delta.InMilliseconds() <= kMinimumMsBetweenButtonClicks) + return; + + ui::MenuSourceType source_type = ui::MENU_SOURCE_MOUSE; + if (event.IsKeyEvent()) + source_type = ui::MENU_SOURCE_KEYBOARD; + else if (event.IsGestureEvent() || event.IsTouchEvent()) + source_type = ui::MENU_SOURCE_TOUCH; + ShowDropDownMenu(source_type); + } +} + void Combobox::UpdateFromModel() { int max_width = 0; const gfx::Font& font = Combobox::GetFont(); @@ -369,6 +595,15 @@ void Combobox::UpdateFromModel() { content_size_.SetSize(max_width, font.GetHeight()); } +void Combobox::UpdateBorder() { + FocusableBorder* border = new FocusableBorder(); + if (style_ == STYLE_NOTIFY_ON_CLICK) + border->SetInsets(8, 13, 8, 13); + if (invalid_) + border->SetColor(kWarningColor); + set_border(border); +} + void Combobox::AdjustBoundsForRTLUI(gfx::Rect* rect) const { rect->set_x(GetMirroredXForRect(*rect)); } @@ -376,7 +611,7 @@ void Combobox::AdjustBoundsForRTLUI(gfx::Rect* rect) const { void Combobox::PaintText(gfx::Canvas* canvas) { gfx::Insets insets = GetInsets(); - canvas->Save(); + gfx::ScopedCanvas scoped_canvas(canvas); canvas->ClipRect(GetContentsBounds()); int x = insets.left(); @@ -392,8 +627,8 @@ void Combobox::PaintText(gfx::Canvas* canvas) { selected_index_ = 0; string16 text = model()->GetItemAt(selected_index_); - int disclosure_arrow_offset = width() - disclosure_arrow_->width() - - kDisclosureArrowLeftPadding - kDisclosureArrowRightPadding; + int disclosure_arrow_offset = width() - disclosure_arrow_->width() - + GetDisclosureArrowLeftPadding() - GetDisclosureArrowRightPadding(); const gfx::Font& font = Combobox::GetFont(); int text_width = font.GetStringWidth(text); @@ -404,7 +639,8 @@ void Combobox::PaintText(gfx::Canvas* canvas) { AdjustBoundsForRTLUI(&text_bounds); canvas->DrawStringInt(text, font, text_color, text_bounds); - gfx::Rect arrow_bounds(disclosure_arrow_offset + kDisclosureArrowLeftPadding, + int arrow_x = disclosure_arrow_offset + GetDisclosureArrowLeftPadding(); + gfx::Rect arrow_bounds(arrow_x, height() / 2 - disclosure_arrow_->height() / 2, disclosure_arrow_->width(), disclosure_arrow_->height()); @@ -416,8 +652,63 @@ void Combobox::PaintText(gfx::Canvas* canvas) { paint.setXfermodeMode(SkXfermode::kDstOut_Mode); canvas->DrawImageInt(*disclosure_arrow_, arrow_bounds.x(), arrow_bounds.y(), paint); +} + +void Combobox::PaintButtons(gfx::Canvas* canvas) { + DCHECK(style_ == STYLE_NOTIFY_ON_CLICK); + + gfx::ScopedCanvas scoped_canvas(canvas); + if (base::i18n::IsRTL()) { + canvas->Translate(gfx::Vector2d(width(), 0)); + canvas->Scale(-1, 1); + } + + bool focused = HasFocus(); + const std::vector<const gfx::ImageSkia*>& arrow_button_images = + menu_button_images_[focused][ + arrow_button_->state() == Button::STATE_HOVERED ? + Button::STATE_NORMAL : arrow_button_->state()]; + + int text_button_hover_alpha = + text_button_->state() == Button::STATE_PRESSED ? 0 : + static_cast<int>(static_cast<TransparentButton*>(text_button_)-> + GetAnimationValue() * 255); + if (text_button_hover_alpha < 255) { + canvas->SaveLayerAlpha(255 - text_button_hover_alpha); + Painter* text_button_painter = + body_button_painters_[focused][ + text_button_->state() == Button::STATE_HOVERED ? + Button::STATE_NORMAL : text_button_->state()].get(); + Painter::PaintPainterAt(canvas, text_button_painter, + gfx::Rect(0, 0, text_button_->width(), height())); + canvas->Restore(); + } + if (0 < text_button_hover_alpha) { + canvas->SaveLayerAlpha(text_button_hover_alpha); + Painter* text_button_hovered_painter = + body_button_painters_[focused][Button::STATE_HOVERED].get(); + Painter::PaintPainterAt(canvas, text_button_hovered_painter, + gfx::Rect(0, 0, text_button_->width(), height())); + canvas->Restore(); + } - canvas->Restore(); + int arrow_button_hover_alpha = + arrow_button_->state() == Button::STATE_PRESSED ? 0 : + static_cast<int>(static_cast<TransparentButton*>(arrow_button_)-> + GetAnimationValue() * 255); + if (arrow_button_hover_alpha < 255) { + canvas->SaveLayerAlpha(255 - arrow_button_hover_alpha); + PaintArrowButton(canvas, arrow_button_images, arrow_button_->x(), height()); + canvas->Restore(); + } + if (0 < arrow_button_hover_alpha) { + canvas->SaveLayerAlpha(arrow_button_hover_alpha); + const std::vector<const gfx::ImageSkia*>& arrow_button_hovered_images = + menu_button_images_[focused][Button::STATE_HOVERED]; + PaintArrowButton(canvas, arrow_button_hovered_images, + arrow_button_->x(), height()); + canvas->Restore(); + } } void Combobox::ShowDropDownMenu(ui::MenuSourceType source_type) { @@ -427,8 +718,8 @@ void Combobox::ShowDropDownMenu(ui::MenuSourceType source_type) { // Extend the menu to the width of the combobox. MenuItemView* menu = dropdown_list_menu_runner_->GetMenu(); SubmenuView* submenu = menu->CreateSubmenu(); - submenu->set_minimum_preferred_width(size().width() - - (kMenuBorderWidthLeft + kMenuBorderWidthRight)); + submenu->set_minimum_preferred_width( + size().width() - (kMenuBorderWidthLeft + kMenuBorderWidthRight)); gfx::Rect lb = GetLocalBounds(); gfx::Point menu_position(lb.origin()); @@ -441,16 +732,25 @@ void Combobox::ShowDropDownMenu(ui::MenuSourceType source_type) { View::ConvertPointToScreen(this, &menu_position); if (menu_position.x() < 0) - menu_position.set_x(0); + menu_position.set_x(0); gfx::Rect bounds(menu_position, lb.size()); + Button::ButtonState original_state = Button::STATE_NORMAL; + if (arrow_button_) { + original_state = arrow_button_->state(); + arrow_button_->SetState(Button::STATE_PRESSED); + } dropdown_open_ = true; if (dropdown_list_menu_runner_->RunMenuAt(GetWidget(), NULL, bounds, - MenuItemView::TOPLEFT, source_type, MenuRunner::COMBOBOX) == - MenuRunner::MENU_DELETED) + MenuItemView::TOPLEFT, source_type, + MenuRunner::COMBOBOX) == + MenuRunner::MENU_DELETED) { return; + } dropdown_open_ = false; + if (arrow_button_) + arrow_button_->SetState(original_state); closed_time_ = base::Time::Now(); // Need to explicitly clear mouse handler so that events get sent @@ -460,10 +760,11 @@ void Combobox::ShowDropDownMenu(ui::MenuSourceType source_type) { } void Combobox::OnSelectionChanged() { - if (listener_) - listener_->OnSelectedIndexChanged(this); NotifyAccessibilityEvent(ui::AccessibilityTypes::EVENT_VALUE_CHANGED, false); SchedulePaint(); + if (listener_) + listener_->OnSelectedIndexChanged(this); + // |this| may now be deleted. } int Combobox::MenuCommandToIndex(int menu_command_id) const { @@ -474,4 +775,34 @@ int Combobox::MenuCommandToIndex(int menu_command_id) const { return index; } +int Combobox::GetDisclosureArrowLeftPadding() const { + switch (style_) { + case STYLE_SHOW_DROP_DOWN_ON_CLICK: + return kDisclosureArrowLeftPadding; + case STYLE_NOTIFY_ON_CLICK: + return kDisclosureArrowButtonLeftPadding; + } + NOTREACHED(); + return 0; +} + +int Combobox::GetDisclosureArrowRightPadding() const { + switch (style_) { + case STYLE_SHOW_DROP_DOWN_ON_CLICK: + return kDisclosureArrowRightPadding; + case STYLE_NOTIFY_ON_CLICK: + return kDisclosureArrowButtonRightPadding; + } + NOTREACHED(); + return 0; +} + +void Combobox::HandleClickEvent() { + if (style_ != STYLE_NOTIFY_ON_CLICK) + return; + + if (listener_) + listener_->OnComboboxTextButtonClicked(this); +} + } // namespace views diff --git a/ui/views/controls/combobox/combobox.h b/ui/views/controls/combobox/combobox.h index 91469d8073..8ec45c9e21 100644 --- a/ui/views/controls/combobox/combobox.h +++ b/ui/views/controls/combobox/combobox.h @@ -9,12 +9,15 @@ #include "base/time/time.h" #include "ui/base/models/combobox_model_observer.h" +#include "ui/gfx/animation/animation_delegate.h" #include "ui/gfx/native_widget_types.h" +#include "ui/views/controls/button/button.h" #include "ui/views/controls/menu/menu_delegate.h" #include "ui/views/controls/prefix_delegate.h" namespace gfx { class Font; +class SlideAnimation; } namespace ui { @@ -24,16 +27,30 @@ class ComboboxModel; namespace views { class ComboboxListener; +class ComboboxMenuRunner; +class CustomButton; class FocusableBorder; class MenuRunner; +class MenuRunnerHandler; +class Painter; class PrefixSelector; // A non-editable combobox (aka a drop-down list or selector). -class VIEWS_EXPORT Combobox - : public MenuDelegate, - public PrefixDelegate, - public ui::ComboboxModelObserver { +// Combobox has two distinct parts, the drop down arrow and the text. When the +// user clicks on the text the drop down is either shown +// (STYLE_SHOW_DROP_DOWN_ON_CLICK) or the listener is notified +// (STYLE_NOTIFY_ON_CLICK). +class VIEWS_EXPORT Combobox : public MenuDelegate, + public PrefixDelegate, + public ui::ComboboxModelObserver, + public ButtonListener { public: + // The style of the combobox. + enum Style { + STYLE_SHOW_DROP_DOWN_ON_CLICK, + STYLE_NOTIFY_ON_CLICK, + }; + // The combobox's class name. static const char kViewClassName[]; @@ -46,6 +63,8 @@ class VIEWS_EXPORT Combobox // Sets the listener which will be called when a selection has been made. void set_listener(ComboboxListener* listener) { listener_ = listener; } + void SetStyle(Style style); + // Informs the combobox that its model changed. void ModelChanged(); @@ -72,16 +91,14 @@ class VIEWS_EXPORT Combobox virtual gfx::Size GetPreferredSize() OVERRIDE; virtual const char* GetClassName() const OVERRIDE; virtual bool SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) OVERRIDE; - virtual bool OnMousePressed(const ui::MouseEvent& mouse_event) OVERRIDE; - virtual bool OnMouseDragged(const ui::MouseEvent& mouse_event) OVERRIDE; virtual bool OnKeyPressed(const ui::KeyEvent& e) OVERRIDE; virtual bool OnKeyReleased(const ui::KeyEvent& e) OVERRIDE; - virtual void OnGestureEvent(ui::GestureEvent* gesture) OVERRIDE; virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; virtual void OnFocus() OVERRIDE; virtual void OnBlur() OVERRIDE; virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; virtual ui::TextInputClient* GetTextInputClient() OVERRIDE; + virtual void Layout() OVERRIDE; // Overridden from MenuDelegate: virtual bool IsItemChecked(int id) const OVERRIDE; @@ -98,16 +115,28 @@ class VIEWS_EXPORT Combobox // Overriden from ComboboxModelObserver: virtual void OnModelChanged() OVERRIDE; + // Overriden from ButtonListener: + virtual void ButtonPressed(Button* sender, const ui::Event& event) OVERRIDE; + private: + FRIEND_TEST_ALL_PREFIXES(ComboboxTest, Click); + FRIEND_TEST_ALL_PREFIXES(ComboboxTest, NotifyOnClickWithMouse); + // Updates the combobox's content from its model. void UpdateFromModel(); + // Updates the border according to the current state. + void UpdateBorder(); + // Given bounds within our View, this helper mirrors the bounds if necessary. void AdjustBoundsForRTLUI(gfx::Rect* rect) const; - // Draw the selected value of the drop down list + // Draws the selected value of the drop down list void PaintText(gfx::Canvas* canvas); + // Draws the button images. + void PaintButtons(gfx::Canvas* canvas); + // Show the drop down list void ShowDropDownMenu(ui::MenuSourceType source_type); @@ -117,9 +146,18 @@ class VIEWS_EXPORT Combobox // Converts a menu command ID to a menu item index. int MenuCommandToIndex(int menu_command_id) const; + int GetDisclosureArrowLeftPadding() const; + int GetDisclosureArrowRightPadding() const; + + // Handles the clicking event. + void HandleClickEvent(); + // Our model. Not owned. ui::ComboboxModel* model_; + // The visual style of this combobox. + Style style_; + // Our listener. Not owned. Notified when the selected index change. ComboboxListener* listener_; @@ -135,9 +173,6 @@ class VIEWS_EXPORT Combobox // A helper used to select entries by keyboard input. scoped_ptr<PrefixSelector> selector_; - // The reference to the border class. The object is owned by View::border_. - FocusableBorder* text_border_; - // The disclosure arrow next to the currently selected item from the list. const gfx::ImageSkia* disclosure_arrow_; @@ -158,6 +193,22 @@ class VIEWS_EXPORT Combobox // The maximum dimensions of the content in the dropdown gfx::Size content_size_; + // The painters or images that are used when |style_| is STYLE_BUTTONS. The + // first index means the state of unfocused or focused. + // The images are owned by ResourceBundle. + scoped_ptr<Painter> body_button_painters_[2][Button::STATE_COUNT]; + std::vector<const gfx::ImageSkia*> + menu_button_images_[2][Button::STATE_COUNT]; + + // The transparent buttons to handle events and render buttons. These are + // placed on top of this combobox as child views, accept event and manage the + // button states. These are not rendered but when |style_| is + // STYLE_NOTIFY_ON_CLICK, a Combobox renders the button images according to + // these button states. + // The base View takes the ownerships of these as child views. + CustomButton* text_button_; + CustomButton* arrow_button_; + DISALLOW_COPY_AND_ASSIGN(Combobox); }; diff --git a/ui/views/controls/combobox/combobox_listener.h b/ui/views/controls/combobox/combobox_listener.h index 987f4f442d..2609f64702 100644 --- a/ui/views/controls/combobox/combobox_listener.h +++ b/ui/views/controls/combobox/combobox_listener.h @@ -15,6 +15,10 @@ class ComboboxListener { public: virtual void OnSelectedIndexChanged(Combobox* combobox) = 0; + // Handles when the combobox's style is the button style and the button is + // clicked. + virtual void OnComboboxTextButtonClicked(Combobox* combobox) {} + protected: virtual ~ComboboxListener() {} }; diff --git a/ui/views/controls/combobox/combobox_unittest.cc b/ui/views/controls/combobox/combobox_unittest.cc index 3637c087b1..172ead35f2 100644 --- a/ui/views/controls/combobox/combobox_unittest.cc +++ b/ui/views/controls/combobox/combobox_unittest.cc @@ -6,19 +6,51 @@ #include <set> +#include "base/basictypes.h" #include "base/strings/utf_string_conversions.h" #include "ui/base/models/combobox_model.h" #include "ui/events/event.h" #include "ui/events/keycodes/keyboard_codes.h" +#include "ui/views/controls/combobox/combobox_listener.h" +#include "ui/views/controls/menu/menu_runner.h" +#include "ui/views/controls/menu/menu_runner_handler.h" #include "ui/views/ime/mock_input_method.h" +#include "ui/views/test/menu_runner_test_api.h" #include "ui/views/test/views_test_base.h" #include "ui/views/widget/widget.h" +namespace views { + namespace { +// An dummy implementation of MenuRunnerHandler to check if the dropdown menu is +// shown or not. +class TestMenuRunnerHandler : public MenuRunnerHandler { + public: + TestMenuRunnerHandler() + : executed_(false) {} + + bool executed() const { return executed_; } + + virtual MenuRunner::RunResult RunMenuAt(Widget* parent, + MenuButton* button, + const gfx::Rect& bounds, + MenuItemView::AnchorPosition anchor, + ui::MenuSourceType source_type, + int32 types) OVERRIDE { + executed_ = true; + return MenuRunner::NORMAL_EXIT; + } + + private: + bool executed_; + + DISALLOW_COPY_AND_ASSIGN(TestMenuRunnerHandler); +}; + // A wrapper of Combobox to intercept the result of OnKeyPressed() and // OnKeyReleased() methods. -class TestCombobox : public views::Combobox { +class TestCombobox : public Combobox { public: explicit TestCombobox(ui::ComboboxModel* model) : Combobox(model), @@ -28,13 +60,13 @@ class TestCombobox : public views::Combobox { virtual bool OnKeyPressed(const ui::KeyEvent& e) OVERRIDE { key_received_ = true; - key_handled_ = views::Combobox::OnKeyPressed(e); + key_handled_ = Combobox::OnKeyPressed(e); return key_handled_; } virtual bool OnKeyReleased(const ui::KeyEvent& e) OVERRIDE { key_received_ = true; - key_handled_ = views::Combobox::OnKeyReleased(e); + key_handled_ = Combobox::OnKeyReleased(e); return key_handled_; } @@ -83,9 +115,58 @@ class TestComboboxModel : public ui::ComboboxModel { DISALLOW_COPY_AND_ASSIGN(TestComboboxModel); }; -} // namespace +class EvilListener : public ComboboxListener { + public: + EvilListener() : deleted_(false) {}; + virtual ~EvilListener() {}; -namespace views { + // ComboboxListener: + virtual void OnSelectedIndexChanged(Combobox* combobox) OVERRIDE { + delete combobox; + deleted_ = true; + } + + bool deleted() const { return deleted_; } + + private: + bool deleted_; + + DISALLOW_COPY_AND_ASSIGN(EvilListener); +}; + +class TestComboboxListener : public views::ComboboxListener { + public: + TestComboboxListener() + : on_selected_index_changed_called_(false), + on_combobox_text_button_clicked_called_(false) { + } + virtual ~TestComboboxListener() {} + + virtual void OnSelectedIndexChanged(views::Combobox* combobox) OVERRIDE { + on_selected_index_changed_called_ = true; + } + + virtual void OnComboboxTextButtonClicked(views::Combobox* combobox) OVERRIDE { + on_combobox_text_button_clicked_called_ = true; + } + + bool on_selected_index_changed_called() const { + return on_selected_index_changed_called_; + } + + bool on_combobox_text_button_clicked_called() const { + return on_combobox_text_button_clicked_called_; + } + + private: + bool on_selected_index_changed_called_; + bool on_combobox_text_button_clicked_called_; + + private: + DISALLOW_COPY_AND_ASSIGN(TestComboboxListener); +}; + +} // namespace class ComboboxTest : public ViewsTestBase { public: @@ -106,7 +187,7 @@ class ComboboxTest : public ViewsTestBase { widget_ = new Widget; Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); - params.bounds = gfx::Rect(100, 100, 100, 100); + params.bounds = gfx::Rect(200, 200, 200, 200); widget_->Init(params); View* container = new View(); widget_->SetContentsView(container); @@ -119,11 +200,16 @@ class ComboboxTest : public ViewsTestBase { input_method_->OnFocus(); combobox_->RequestFocus(); + combobox_->SizeToPreferredSize(); } protected: void SendKeyEvent(ui::KeyboardCode key_code) { - ui::KeyEvent event(ui::ET_KEY_PRESSED, key_code, 0, false); + SendKeyEventWithType(key_code, ui::ET_KEY_PRESSED); + } + + void SendKeyEventWithType(ui::KeyboardCode key_code, ui::EventType type) { + ui::KeyEvent event(type, key_code, 0, false); input_method_->DispatchKeyEvent(event); } @@ -131,6 +217,17 @@ class ComboboxTest : public ViewsTestBase { return widget_->GetFocusManager()->GetFocusedView(); } + void PerformClick(const gfx::Point& point) { + ui::MouseEvent pressed_event = ui::MouseEvent(ui::ET_MOUSE_PRESSED, point, + point, + ui::EF_LEFT_MOUSE_BUTTON); + widget_->OnMouseEvent(&pressed_event); + ui::MouseEvent released_event = ui::MouseEvent(ui::ET_MOUSE_RELEASED, point, + point, + ui::EF_LEFT_MOUSE_BUTTON); + widget_->OnMouseEvent(&released_event); + } + // We need widget to populate wrapper class. Widget* widget_; @@ -340,4 +437,102 @@ TEST_F(ComboboxTest, SelectValue) { EXPECT_EQ(1, combobox_->selected_index()); } +TEST_F(ComboboxTest, ListenerHandlesDelete) { + TestComboboxModel model; + TestCombobox* combobox = new TestCombobox(&model); // Deleted on change. + EvilListener evil_listener; + combobox->set_listener(&evil_listener); + ASSERT_NO_FATAL_FAILURE(combobox->ExecuteCommand(2)); + EXPECT_TRUE(evil_listener.deleted()); +} + +TEST_F(ComboboxTest, Click) { + InitCombobox(); + + TestComboboxListener listener; + combobox_->set_listener(&listener); + + combobox_->Layout(); + + // Click the left side. The menu is shown. + TestMenuRunnerHandler* test_menu_runner_handler = new TestMenuRunnerHandler(); + scoped_ptr<MenuRunnerHandler> menu_runner_handler(test_menu_runner_handler); + test::MenuRunnerTestAPI test_api( + combobox_->dropdown_list_menu_runner_.get()); + test_api.SetMenuRunnerHandler(menu_runner_handler.Pass()); + PerformClick(gfx::Point(combobox_->x() + 1, + combobox_->y() + combobox_->height() / 2)); + EXPECT_FALSE(listener.on_combobox_text_button_clicked_called()); + EXPECT_TRUE(test_menu_runner_handler->executed()); +} + +TEST_F(ComboboxTest, NotifyOnClickWithReturnKey) { + InitCombobox(); + + TestComboboxListener listener; + combobox_->set_listener(&listener); + + // With STYLE_SHOW_DROP_DOWN_ON_CLICK, the click event is ignored. + SendKeyEvent(ui::VKEY_RETURN); + EXPECT_FALSE(listener.on_combobox_text_button_clicked_called()); + + // With STYLE_NOTIFY_ON_CLICK, the click event is notified. + combobox_->SetStyle(Combobox::STYLE_NOTIFY_ON_CLICK); + SendKeyEvent(ui::VKEY_RETURN); + EXPECT_TRUE(listener.on_combobox_text_button_clicked_called()); +} + +TEST_F(ComboboxTest, NotifyOnClickWithSpaceKey) { + InitCombobox(); + + TestComboboxListener listener; + combobox_->set_listener(&listener); + + // With STYLE_SHOW_DROP_DOWN_ON_CLICK, the click event is ignored. + SendKeyEvent(ui::VKEY_SPACE); + EXPECT_FALSE(listener.on_combobox_text_button_clicked_called()); + SendKeyEventWithType(ui::VKEY_SPACE, ui::ET_KEY_RELEASED); + EXPECT_FALSE(listener.on_combobox_text_button_clicked_called()); + + // With STYLE_NOTIFY_ON_CLICK, the click event is notified after releasing. + combobox_->SetStyle(Combobox::STYLE_NOTIFY_ON_CLICK); + SendKeyEvent(ui::VKEY_SPACE); + EXPECT_FALSE(listener.on_combobox_text_button_clicked_called()); + SendKeyEventWithType(ui::VKEY_SPACE, ui::ET_KEY_RELEASED); + EXPECT_TRUE(listener.on_combobox_text_button_clicked_called()); +} + +TEST_F(ComboboxTest, NotifyOnClickWithMouse) { + InitCombobox(); + + TestComboboxListener listener; + combobox_->set_listener(&listener); + + combobox_->SetStyle(Combobox::STYLE_NOTIFY_ON_CLICK); + combobox_->Layout(); + + // Click the right side (arrow button). The menu is shown. + TestMenuRunnerHandler* test_menu_runner_handler = new TestMenuRunnerHandler(); + scoped_ptr<MenuRunnerHandler> menu_runner_handler(test_menu_runner_handler); + scoped_ptr<test::MenuRunnerTestAPI> test_api( + new test::MenuRunnerTestAPI(combobox_->dropdown_list_menu_runner_.get())); + test_api->SetMenuRunnerHandler(menu_runner_handler.Pass()); + + PerformClick(gfx::Point(combobox_->x() + combobox_->width() - 1, + combobox_->y() + combobox_->height() / 2)); + EXPECT_FALSE(listener.on_combobox_text_button_clicked_called()); + EXPECT_TRUE(test_menu_runner_handler->executed()); + + // Click the left side (text button). The click event is notified. + test_menu_runner_handler = new TestMenuRunnerHandler(); + menu_runner_handler.reset(test_menu_runner_handler); + test_api.reset( + new test::MenuRunnerTestAPI(combobox_->dropdown_list_menu_runner_.get())); + test_api->SetMenuRunnerHandler(menu_runner_handler.Pass()); + PerformClick(gfx::Point(combobox_->x() + 1, + combobox_->y() + combobox_->height() / 2)); + EXPECT_TRUE(listener.on_combobox_text_button_clicked_called()); + EXPECT_FALSE(test_menu_runner_handler->executed()); +} + } // namespace views diff --git a/ui/views/controls/focusable_border.cc b/ui/views/controls/focusable_border.cc index c3a4af47e5..9789ed5076 100644 --- a/ui/views/controls/focusable_border.cc +++ b/ui/views/controls/focusable_border.cc @@ -22,8 +22,7 @@ const int kRightInsetSize = 4; namespace views { FocusableBorder::FocusableBorder() - : has_focus_(false), - insets_(kTopInsetSize, kLeftInsetSize, + : insets_(kTopInsetSize, kLeftInsetSize, kBottomInsetSize, kRightInsetSize), override_color_(SK_ColorWHITE), use_default_color_(true) { @@ -46,8 +45,8 @@ void FocusableBorder::Paint(const View& view, gfx::Canvas* canvas) { SkColor color = override_color_; if (use_default_color_) { color = view.GetNativeTheme()->GetSystemColor( - has_focus_ ? ui::NativeTheme::kColorId_FocusedBorderColor : - ui::NativeTheme::kColorId_UnfocusedBorderColor); + view.HasFocus() ? ui::NativeTheme::kColorId_FocusedBorderColor : + ui::NativeTheme::kColorId_UnfocusedBorderColor); } paint.setColor(color); diff --git a/ui/views/controls/focusable_border.h b/ui/views/controls/focusable_border.h index 18b7583385..bad888e8af 100644 --- a/ui/views/controls/focusable_border.h +++ b/ui/views/controls/focusable_border.h @@ -25,11 +25,6 @@ class VIEWS_EXPORT FocusableBorder : public Border { // Sets the insets of the border. void SetInsets(int top, int left, int bottom, int right); - // Sets the focus state. - void set_has_focus(bool has_focus) { - has_focus_ = has_focus; - } - // Sets the color of this border. void SetColor(SkColor color); // Reverts the color of this border to the system default. @@ -41,7 +36,6 @@ class VIEWS_EXPORT FocusableBorder : public Border { virtual gfx::Size GetMinimumSize() const OVERRIDE; private: - bool has_focus_; gfx::Insets insets_; // The color to paint the border when |use_default_color_| is false. diff --git a/ui/views/controls/image_view.cc b/ui/views/controls/image_view.cc index bc2ad8e0d4..2bbf91cab9 100644 --- a/ui/views/controls/image_view.cc +++ b/ui/views/controls/image_view.cc @@ -10,6 +10,7 @@ #include "ui/base/accessibility/accessible_view_state.h" #include "ui/gfx/canvas.h" #include "ui/gfx/insets.h" +#include "ui/views/painter.h" namespace views { @@ -19,7 +20,8 @@ ImageView::ImageView() vert_alignment_(CENTER), interactive_(true), last_paint_scale_(0.f), - last_painted_bitmap_pixels_(NULL) { + last_painted_bitmap_pixels_(NULL), + focus_painter_(Painter::CreateDashedFocusPainter()) { } ImageView::~ImageView() { @@ -73,6 +75,10 @@ void ImageView::ResetImageSize() { image_size_set_ = false; } +void ImageView::SetFocusPainter(scoped_ptr<Painter> focus_painter) { + focus_painter_ = focus_painter.Pass(); +} + gfx::Size ImageView::GetPreferredSize() { gfx::Insets insets = GetInsets(); if (image_size_set_) { @@ -126,31 +132,22 @@ gfx::Point ImageView::ComputeImageOrigin(const gfx::Size& image_size) const { return gfx::Point(x, y); } -void ImageView::OnPaint(gfx::Canvas* canvas) { - View::OnPaint(canvas); - - last_paint_scale_ = canvas->image_scale(); - last_painted_bitmap_pixels_ = NULL; - - if (image_.isNull()) - return; +void ImageView::OnFocus() { + View::OnFocus(); + if (focus_painter_.get()) + SchedulePaint(); +} - gfx::Rect image_bounds(GetImageBounds()); - if (image_bounds.IsEmpty()) - return; +void ImageView::OnBlur() { + View::OnBlur(); + if (focus_painter_.get()) + SchedulePaint(); +} - if (image_bounds.size() != gfx::Size(image_.width(), image_.height())) { - // Resize case - SkPaint paint; - paint.setFilterBitmap(true); - canvas->DrawImageInt(image_, 0, 0, image_.width(), image_.height(), - image_bounds.x(), image_bounds.y(), image_bounds.width(), - image_bounds.height(), true, paint); - } else { - canvas->DrawImageInt(image_, image_bounds.x(), image_bounds.y()); - } - last_painted_bitmap_pixels_ = - image_.GetRepresentation(last_paint_scale_).sk_bitmap().getPixels(); +void ImageView::OnPaint(gfx::Canvas* canvas) { + View::OnPaint(canvas); + OnPaintImage(canvas); + Painter::PaintFocusPainter(this, canvas, focus_painter_.get()); } void ImageView::GetAccessibleState(ui::AccessibleViewState* state) { @@ -200,4 +197,30 @@ bool ImageView::HitTestRect(const gfx::Rect& rect) const { return interactive_ ? View::HitTestRect(rect) : false; } + +void ImageView::OnPaintImage(gfx::Canvas* canvas) { + last_paint_scale_ = canvas->image_scale(); + last_painted_bitmap_pixels_ = NULL; + + if (image_.isNull()) + return; + + gfx::Rect image_bounds(GetImageBounds()); + if (image_bounds.IsEmpty()) + return; + + if (image_bounds.size() != gfx::Size(image_.width(), image_.height())) { + // Resize case + SkPaint paint; + paint.setFilterBitmap(true); + canvas->DrawImageInt(image_, 0, 0, image_.width(), image_.height(), + image_bounds.x(), image_bounds.y(), image_bounds.width(), + image_bounds.height(), true, paint); + } else { + canvas->DrawImageInt(image_, image_bounds.x(), image_bounds.y()); + } + last_painted_bitmap_pixels_ = + image_.GetRepresentation(last_paint_scale_).sk_bitmap().getPixels(); +} + } // namespace views diff --git a/ui/views/controls/image_view.h b/ui/views/controls/image_view.h index b40cb83461..b0f4ce852f 100644 --- a/ui/views/controls/image_view.h +++ b/ui/views/controls/image_view.h @@ -14,6 +14,8 @@ class Canvas; namespace views { +class Painter; + ///////////////////////////////////////////////////////////////////////////// // // ImageView class. @@ -75,8 +77,12 @@ class VIEWS_EXPORT ImageView : public View { void set_interactive(bool interactive) { interactive_ = interactive; } + void SetFocusPainter(scoped_ptr<Painter> focus_painter); + // Overriden from View: virtual gfx::Size GetPreferredSize() OVERRIDE; + virtual void OnFocus() OVERRIDE; + virtual void OnBlur() OVERRIDE; virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; virtual bool GetTooltipText(const gfx::Point& p, @@ -84,6 +90,8 @@ class VIEWS_EXPORT ImageView : public View { virtual bool HitTestRect(const gfx::Rect& rect) const OVERRIDE; private: + void OnPaintImage(gfx::Canvas* canvas); + // Returns true if |img| is the same as the last image we painted. This is // intended to be a quick check, not exhaustive. In other words it's possible // for this to return false even though the images are in fact equal. @@ -121,6 +129,8 @@ class VIEWS_EXPORT ImageView : public View { // safe to cache. void* last_painted_bitmap_pixels_; + scoped_ptr<views::Painter> focus_painter_; + DISALLOW_COPY_AND_ASSIGN(ImageView); }; diff --git a/ui/views/controls/label_unittest.cc b/ui/views/controls/label_unittest.cc index b64d98c597..c36b5de788 100644 --- a/ui/views/controls/label_unittest.cc +++ b/ui/views/controls/label_unittest.cc @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "ui/views/controls/label.h" + #include "base/i18n/rtl.h" #include "base/strings/utf_string_conversions.h" #include "testing/gtest/include/gtest/gtest.h" @@ -9,15 +11,13 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/gfx/canvas.h" #include "ui/views/border.h" -#include "ui/views/controls/label.h" namespace views { // All text sizing measurements (width and height) should be greater than this. const int kMinTextDimension = 4; -// Disabled. http://crbug.com/316955 -TEST(LabelTest, DISABLED_FontPropertySymbol) { +TEST(LabelTest, FontPropertySymbol) { Label label; std::string font_name("symbol"); gfx::Font font(font_name, 26); diff --git a/ui/views/controls/link.cc b/ui/views/controls/link.cc index b2bcc8f692..5a5729acc9 100644 --- a/ui/views/controls/link.cc +++ b/ui/views/controls/link.cc @@ -11,6 +11,7 @@ #include "ui/base/accessibility/accessible_view_state.h" #include "ui/events/event.h" #include "ui/events/keycodes/keyboard_codes.h" +#include "ui/gfx/canvas.h" #include "ui/gfx/color_utils.h" #include "ui/gfx/font.h" #include "ui/views/controls/link_listener.h" @@ -62,6 +63,25 @@ gfx::NativeCursor Link::GetCursor(const ui::MouseEvent& event) { #endif } +void Link::OnPaint(gfx::Canvas* canvas) { + Label::OnPaint(canvas); + + if (HasFocus()) + canvas->DrawFocusRect(GetLocalBounds()); +} + +void Link::OnFocus() { + Label::OnFocus(); + // We render differently focused. + SchedulePaint(); +} + +void Link::OnBlur() { + Label::OnBlur(); + // We render differently focused. + SchedulePaint(); +} + bool Link::HitTestRect(const gfx::Rect& rect) const { // We need to allow clicks on the link. So we override the implementation in // Label and use the default implementation of View. diff --git a/ui/views/controls/link.h b/ui/views/controls/link.h index 9230acbb29..f6a876de86 100644 --- a/ui/views/controls/link.h +++ b/ui/views/controls/link.h @@ -37,6 +37,9 @@ class VIEWS_EXPORT Link : public Label { virtual void OnEnabledChanged() OVERRIDE; virtual const char* GetClassName() const OVERRIDE; virtual gfx::NativeCursor GetCursor(const ui::MouseEvent& event) OVERRIDE; + virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; + virtual void OnFocus() OVERRIDE; + virtual void OnBlur() OVERRIDE; virtual bool HitTestRect(const gfx::Rect& rect) const OVERRIDE; virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE; virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE; diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc index 0035ae3773..3b0e5d552c 100644 --- a/ui/views/controls/menu/menu_controller.cc +++ b/ui/views/controls/menu/menu_controller.cc @@ -46,6 +46,7 @@ #endif #if defined(OS_WIN) +#include "ui/views/win/hwnd_message_handler.h" #include "ui/views/win/hwnd_util.h" #endif @@ -103,18 +104,17 @@ bool TitleMatchesMnemonic(MenuItemView* menu, char16 key) { } // namespace // Returns the first descendant of |view| that is hot tracked. -static View* GetFirstHotTrackedView(View* view) { +static CustomButton* GetFirstHotTrackedView(View* view) { if (!view) return NULL; - - if (!strcmp(view->GetClassName(), CustomButton::kViewClassName)) { - CustomButton* button = static_cast<CustomButton*>(view); + CustomButton* button = CustomButton::AsCustomButton(view); + if (button) { if (button->IsHotTracked()) return button; } for (int i = 0; i < view->child_count(); ++i) { - View* hot_view = GetFirstHotTrackedView(view->child_at(i)); + CustomButton* hot_view = GetFirstHotTrackedView(view->child_at(i)); if (hot_view) return hot_view; } @@ -385,6 +385,27 @@ MenuItemView* MenuController::Run(Widget* parent, // Close any open menus. SetSelection(NULL, SELECTION_UPDATE_IMMEDIATELY | SELECTION_EXIT); +#if defined(OS_WIN) && defined(USE_AURA) + // On Windows, if we select the menu item by touch and if the window at the + // location is another window on the same thread, that window gets a + // WM_MOUSEACTIVATE message and ends up activating itself, which is not + // correct. We workaround this by setting a property on the window at the + // current cursor location. We check for this property in our + // WM_MOUSEACTIVATE handler and don't activate the window if the property is + // set. + if (item_selected_by_touch_) { + item_selected_by_touch_ = false; + POINT cursor_pos; + ::GetCursorPos(&cursor_pos); + HWND window = ::WindowFromPoint(cursor_pos); + if (::GetWindowThreadProcessId(window, NULL) == + ::GetCurrentThreadId()) { + ::SetProp(window, views::kIgnoreTouchMouseActivateForWindow, + reinterpret_cast<HANDLE>(true)); + } + } +#endif + if (nested_menu) { DCHECK(!menu_stack_.empty()); // We're running from within a menu, restore the previous state. @@ -426,7 +447,6 @@ MenuItemView* MenuController::Run(Widget* parent, menu_button_->SetState(CustomButton::STATE_NORMAL); menu_button_->SchedulePaint(); } - return result; } @@ -601,6 +621,7 @@ void MenuController::OnGestureEvent(SubmenuView* source, if (part.menu->GetDelegate()->IsTriggerableEvent( part.menu, *event)) { Accept(part.menu, event->flags()); + item_selected_by_touch_ = true; } event->StopPropagation(); } else if (part.type == MenuPart::MENU_ITEM) { @@ -808,12 +829,9 @@ void MenuController::SetSelection(MenuItemView* menu_item, bool pending_item_changed = pending_state_.item != menu_item; if (pending_item_changed && pending_state_.item) { - View* current_hot_view = GetFirstHotTrackedView(pending_state_.item); - if (current_hot_view && !strcmp(current_hot_view->GetClassName(), - CustomButton::kViewClassName)) { - CustomButton* button = static_cast<CustomButton*>(current_hot_view); + CustomButton* button = GetFirstHotTrackedView(pending_state_.item); + if (button) button->SetHotTracked(false); - } } // Notify the old path it isn't selected. @@ -955,7 +973,7 @@ void MenuController::StartDrag(SubmenuView* source, // the selected item, so need to map to screen first then to item. gfx::Point press_loc(location); View::ConvertPointToScreen(source->GetScrollViewContainer(), &press_loc); - View::ConvertPointToTarget(NULL, item, &press_loc); + View::ConvertPointFromScreen(item, &press_loc); gfx::Point widget_loc(press_loc); View::ConvertPointToWidget(item, &widget_loc); scoped_ptr<gfx::Canvas> canvas(GetCanvasForDragImage( @@ -1173,7 +1191,8 @@ MenuController::MenuController(ui::NativeTheme* theme, menu_config_(theme), closing_event_time_(base::TimeDelta()), menu_start_time_(base::TimeTicks()), - accept_on_f4_(false) { + accept_on_f4_(false), + item_selected_by_touch_(false) { active_instance_ = this; } @@ -1189,16 +1208,14 @@ MenuController::~MenuController() { MenuController::SendAcceleratorResultType MenuController::SendAcceleratorToHotTrackedView() { - View* hot_view = GetFirstHotTrackedView(pending_state_.item); + CustomButton* hot_view = GetFirstHotTrackedView(pending_state_.item); if (!hot_view) return ACCELERATOR_NOT_PROCESSED; ui::Accelerator accelerator(ui::VKEY_RETURN, ui::EF_NONE); hot_view->AcceleratorPressed(accelerator); - if (!strcmp(hot_view->GetClassName(), CustomButton::kViewClassName)) { - CustomButton* button = static_cast<CustomButton*>(hot_view); - button->SetHotTracked(true); - } + CustomButton* button = static_cast<CustomButton*>(hot_view); + button->SetHotTracked(true); return (exit_type_ == EXIT_NONE) ? ACCELERATOR_PROCESSED : ACCELERATOR_PROCESSED_EXIT; } @@ -1428,7 +1445,7 @@ bool MenuController::GetMenuPartByScreenCoordinateImpl( // Is the mouse over the scroll buttons? gfx::Point scroll_view_loc = screen_loc; View* scroll_view_container = menu->GetScrollViewContainer(); - View::ConvertPointToTarget(NULL, scroll_view_container, &scroll_view_loc); + View::ConvertPointFromScreen(scroll_view_container, &scroll_view_loc); if (scroll_view_loc.x() < 0 || scroll_view_loc.x() >= scroll_view_container->width() || scroll_view_loc.y() < 0 || @@ -1445,7 +1462,7 @@ bool MenuController::GetMenuPartByScreenCoordinateImpl( // Not over the scroll button. Check the actual menu. if (DoesSubmenuContainLocation(menu, screen_loc)) { gfx::Point menu_loc = screen_loc; - View::ConvertPointToTarget(NULL, menu, &menu_loc); + View::ConvertPointFromScreen(menu, &menu_loc); part->menu = GetMenuItemAt(menu, menu_loc.x(), menu_loc.y()); part->type = MenuPart::MENU_ITEM; part->submenu = menu; @@ -1463,7 +1480,7 @@ bool MenuController::GetMenuPartByScreenCoordinateImpl( bool MenuController::DoesSubmenuContainLocation(SubmenuView* submenu, const gfx::Point& screen_loc) { gfx::Point view_loc = screen_loc; - View::ConvertPointToTarget(NULL, submenu, &view_loc); + View::ConvertPointFromScreen(submenu, &view_loc); gfx::Rect vis_rect = submenu->GetVisibleBounds(); return vis_rect.Contains(view_loc.x(), view_loc.y()); } @@ -1944,23 +1961,19 @@ void MenuController::IncrementSelection(int delta) { } if (item->has_children()) { - View* hot_view = GetFirstHotTrackedView(item); - if (hot_view && - !strcmp(hot_view->GetClassName(), CustomButton::kViewClassName)) { - CustomButton* button = static_cast<CustomButton*>(hot_view); + CustomButton* button = GetFirstHotTrackedView(item); + if (button) { button->SetHotTracked(false); View* to_make_hot = GetNextFocusableView(item, button, delta == 1); - if (to_make_hot && - !strcmp(to_make_hot->GetClassName(), CustomButton::kViewClassName)) { - CustomButton* button_hot = static_cast<CustomButton*>(to_make_hot); + CustomButton* button_hot = CustomButton::AsCustomButton(to_make_hot); + if (button_hot) { button_hot->SetHotTracked(true); return; } } else { View* to_make_hot = GetInitialFocusableView(item, delta == 1); - if (to_make_hot && - !strcmp(to_make_hot->GetClassName(), CustomButton::kViewClassName)) { - CustomButton* button_hot = static_cast<CustomButton*>(to_make_hot); + CustomButton* button_hot = CustomButton::AsCustomButton(to_make_hot); + if (button_hot) { button_hot->SetHotTracked(true); return; } @@ -1979,11 +1992,9 @@ void MenuController::IncrementSelection(int delta) { break; SetSelection(to_select, SELECTION_DEFAULT); View* to_make_hot = GetInitialFocusableView(to_select, delta == 1); - if (to_make_hot && !strcmp(to_make_hot->GetClassName(), - CustomButton::kViewClassName)) { - CustomButton* button_hot = static_cast<CustomButton*>(to_make_hot); + CustomButton* button_hot = CustomButton::AsCustomButton(to_make_hot); + if (button_hot) button_hot->SetHotTracked(true); - } break; } } @@ -2203,7 +2214,7 @@ void MenuController::UpdateActiveMouseView(SubmenuView* event_source, // more complex hierarchies it'll need to change. View::ConvertPointToScreen(event_source->GetScrollViewContainer(), &target_menu_loc); - View::ConvertPointToTarget(NULL, target_menu, &target_menu_loc); + View::ConvertPointFromScreen(target_menu, &target_menu_loc); target = target_menu->GetEventHandlerForPoint(target_menu_loc); if (target == target_menu || !target->enabled()) target = NULL; @@ -2248,7 +2259,7 @@ void MenuController::SendMouseReleaseToActiveView(SubmenuView* event_source, gfx::Point target_loc(event.location()); View::ConvertPointToScreen(event_source->GetScrollViewContainer(), &target_loc); - View::ConvertPointToTarget(NULL, active_mouse_view, &target_loc); + View::ConvertPointFromScreen(active_mouse_view, &target_loc); ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, target_loc, target_loc, event.flags()); // Reset active mouse view before sending mouse released. That way if it calls diff --git a/ui/views/controls/menu/menu_controller.h b/ui/views/controls/menu/menu_controller.h index f99e3f5132..1404d54e5d 100644 --- a/ui/views/controls/menu/menu_controller.h +++ b/ui/views/controls/menu/menu_controller.h @@ -587,6 +587,9 @@ class VIEWS_EXPORT MenuController : public base::MessageLoop::Dispatcher, // Whether the menu should accept on F4, like Windows native Combobox menus. bool accept_on_f4_; + // Set to true if the menu item was selected by touch. + bool item_selected_by_touch_; + DISALLOW_COPY_AND_ASSIGN(MenuController); }; diff --git a/ui/views/controls/menu/menu_item_view.h b/ui/views/controls/menu/menu_item_view.h index 9acb4847ec..2d394bae2f 100644 --- a/ui/views/controls/menu/menu_item_view.h +++ b/ui/views/controls/menu/menu_item_view.h @@ -27,11 +27,6 @@ namespace gfx { class Font; } -namespace ui { -class MenuModel; -class NativeTheme; -} - namespace views { namespace internal { diff --git a/ui/views/controls/menu/menu_runner.cc b/ui/views/controls/menu/menu_runner.cc index bf5680febb..e254dbffc5 100644 --- a/ui/views/controls/menu/menu_runner.cc +++ b/ui/views/controls/menu/menu_runner.cc @@ -7,14 +7,13 @@ #include <set> #include "base/memory/weak_ptr.h" -#include "base/metrics/histogram.h" #include "ui/base/models/menu_model.h" #include "ui/views/controls/button/menu_button.h" #include "ui/views/controls/menu/menu_controller.h" #include "ui/views/controls/menu/menu_controller_delegate.h" #include "ui/views/controls/menu/menu_delegate.h" #include "ui/views/controls/menu/menu_model_adapter.h" -#include "ui/views/controls/menu/submenu_view.h" +#include "ui/views/controls/menu/menu_runner_handler.h" #include "ui/views/widget/widget.h" #if defined(OS_WIN) @@ -25,35 +24,6 @@ namespace views { namespace internal { -void RecordSelectedIndexes(const MenuItemView* menu_item) { - if (!menu_item) - return; - const MenuItemView* parent = menu_item->GetParentMenuItem(); - if (!parent) - return; - - SubmenuView* submenu = parent->GetSubmenu(); - for (int i = 0; i < submenu->GetMenuItemCount(); ++i) { - if (submenu->GetMenuItemAt(i) == menu_item) { - UMA_HISTOGRAM_COUNTS_100("MenuSelection.Index", i); - break; - } - } - - RecordSelectedIndexes(parent); -} - -void RecordMenuStats(MenuItemView* result, base::TimeDelta time_elapsed) { - // Report if user made a selection. - UMA_HISTOGRAM_BOOLEAN("MenuSelection.Result", result != NULL); - - if (result) { - // Report how much time it took to make a selection. - UMA_HISTOGRAM_TIMES("MenuSelection.Time", time_elapsed); - RecordSelectedIndexes(result); - } -} - // Manages the menu. To destroy a MenuRunnerImpl invoke Release(). Release() // deletes immediately if the menu isn't showing. If the menu is showing // Release() cancels the menu and when the nested RunMenuAt() call returns @@ -224,7 +194,6 @@ MenuRunner::RunResult MenuRunnerImpl::RunMenuAt( !for_drop_ && ShouldShowMnemonics(button)); // Run the loop. - base::TimeTicks start_time = base::TimeTicks::Now(); int mouse_event_flags = 0; MenuItemView* result = controller->Run(parent, button, menu_, bounds, anchor, (types & MenuRunner::CONTEXT_MENU) != 0, @@ -235,7 +204,6 @@ MenuRunner::RunResult MenuRunnerImpl::RunMenuAt( // Drop menus return immediately. We finish processing in DropMenuClosed. return MenuRunner::NORMAL_EXIT; } - RecordMenuStats(result, base::TimeTicks::Now() - start_time); return MenuDone(result, mouse_event_flags); } @@ -345,6 +313,11 @@ MenuRunner::RunResult MenuRunner::RunMenuAt(Widget* parent, MenuItemView::AnchorPosition anchor, ui::MenuSourceType source_type, int32 types) { + if (runner_handler_.get()) { + return runner_handler_->RunMenuAt(parent, button, bounds, anchor, + source_type, types); + } + // The parent of the nested menu will have created a DisplayChangeListener, so // we avoid creating a DisplayChangeListener if nested. Drop menus are // transient, so we don't cancel in that case. @@ -384,4 +357,9 @@ base::TimeDelta MenuRunner::closing_event_time() const { return holder_->closing_event_time(); } +void MenuRunner::SetRunnerHandler( + scoped_ptr<MenuRunnerHandler> runner_handler) { + runner_handler_ = runner_handler.Pass(); +} + } // namespace views diff --git a/ui/views/controls/menu/menu_runner.h b/ui/views/controls/menu/menu_runner.h index 277ffd5334..6b46362f18 100644 --- a/ui/views/controls/menu/menu_runner.h +++ b/ui/views/controls/menu/menu_runner.h @@ -18,6 +18,7 @@ namespace views { class MenuButton; class MenuModelAdapter; +class MenuRunnerHandler; class Widget; namespace internal { @@ -25,6 +26,10 @@ class DisplayChangeListener; class MenuRunnerImpl; } +namespace test { +class MenuRunnerTestAPI; +} + // MenuRunner is responsible for showing (running) the menu and additionally // owning the MenuItemView. RunMenuAt() runs a nested message loop. It is safe // to delete MenuRunner at any point, but MenuRunner internally only deletes the @@ -112,10 +117,19 @@ class VIEWS_EXPORT MenuRunner { base::TimeDelta closing_event_time() const; private: + friend class test::MenuRunnerTestAPI; + + // Sets an implementation of RunMenuAt. This is intended to be used at test. + void SetRunnerHandler(scoped_ptr<MenuRunnerHandler> runner_handler); + scoped_ptr<MenuModelAdapter> menu_model_adapter_; internal::MenuRunnerImpl* holder_; + // An implementation of RunMenuAt. This is usually NULL and ignored. If this + // is not NULL, this implementation will be used. + scoped_ptr<MenuRunnerHandler> runner_handler_; + scoped_ptr<internal::DisplayChangeListener> display_change_listener_; DISALLOW_COPY_AND_ASSIGN(MenuRunner); diff --git a/ui/views/controls/menu/menu_runner_handler.h b/ui/views/controls/menu/menu_runner_handler.h new file mode 100644 index 0000000000..46f801af68 --- /dev/null +++ b/ui/views/controls/menu/menu_runner_handler.h @@ -0,0 +1,31 @@ +// Copyright 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. + +#ifndef UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_HANDLER_H_ +#define UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_HANDLER_H_ + +#include "base/basictypes.h" +#include "ui/views/controls/menu/menu_item_view.h" + +namespace views { + +class MenuButton; +class Widget; + +// Used internally by MenuRunner to show the menu. Can be set in tests (see +// MenuRunnerTestApi) for mocking running of the menu. +class VIEWS_EXPORT MenuRunnerHandler { + public: + virtual ~MenuRunnerHandler() {} + virtual MenuRunner::RunResult RunMenuAt(Widget* parent, + MenuButton* button, + const gfx::Rect& bounds, + MenuItemView::AnchorPosition anchor, + ui::MenuSourceType source_type, + int32 types) = 0; +}; + +} // namespace views + +#endif // UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_HANDLER_H_ diff --git a/ui/views/controls/native/native_view_host.cc b/ui/views/controls/native/native_view_host.cc index 760f856cd2..28b1fe3aec 100644 --- a/ui/views/controls/native/native_view_host.cc +++ b/ui/views/controls/native/native_view_host.cc @@ -17,7 +17,7 @@ const char NativeViewHost::kViewClassName[] = "NativeViewHost"; const char kWidgetNativeViewHostKey[] = "WidgetNativeViewHost"; #if defined(USE_AURA) -// Views implmenetatxion draws the focus. +// Views implementation draws the focus. // TODO(oshima): Eliminate this flag and consolidate // the focus border code. const bool NativeViewHost::kRenderNativeControlFocus = false; diff --git a/ui/views/controls/slider.cc b/ui/views/controls/slider.cc index 3b449f0708..242ff5e660 100644 --- a/ui/views/controls/slider.cc +++ b/ui/views/controls/slider.cc @@ -171,6 +171,19 @@ void Slider::SetAccessibleName(const string16& name) { accessible_name_ = name; } +void Slider::OnPaintFocus(gfx::Canvas* canvas) { + if (!HasFocus()) + return; + + if (!focus_border_color_) { + canvas->DrawFocusRect(GetLocalBounds()); + } else if (HasFocus()) { + canvas->DrawSolidFocusRect( + gfx::Rect(1, 1, width() - 3, height() - 3), + focus_border_color_); + } +} + gfx::Size Slider::GetPreferredSize() { const int kSizeMajor = 200; const int kSizeMinor = 40; @@ -248,6 +261,7 @@ void Slider::OnPaint(gfx::Canvas* canvas) { canvas->DrawImageInt(*thumb_, thumb_x, button_cy); } View::OnPaint(canvas); + OnPaintFocus(canvas); } bool Slider::OnMousePressed(const ui::MouseEvent& event) { @@ -316,13 +330,4 @@ void Slider::GetAccessibleState(ui::AccessibleViewState* state) { base::StringPrintf("%d%%", (int)(value_ * 100 + 0.5))); } -void Slider::OnPaintFocusBorder(gfx::Canvas* canvas) { - if (!focus_border_color_) { - View::OnPaintFocusBorder(canvas); - } else if (HasFocus()) { - canvas->DrawRect(gfx::Rect(1, 1, width() - 3, height() - 3), - focus_border_color_); - } -} - } // namespace views diff --git a/ui/views/controls/slider.h b/ui/views/controls/slider.h index 3c17e94af2..cec24c2755 100644 --- a/ui/views/controls/slider.h +++ b/ui/views/controls/slider.h @@ -41,8 +41,7 @@ class VIEWS_EXPORT SliderListener { virtual ~SliderListener() {} }; -class VIEWS_EXPORT Slider : public View, - public gfx::AnimationDelegate { +class VIEWS_EXPORT Slider : public View, public gfx::AnimationDelegate { public: enum Orientation { HORIZONTAL, @@ -80,6 +79,8 @@ class VIEWS_EXPORT Slider : public View, // Moves the button to the specified point and updates the value accordingly. void MoveButtonTo(const gfx::Point& point); + void OnPaintFocus(gfx::Canvas* canvas); + // views::View overrides: virtual gfx::Size GetPreferredSize() OVERRIDE; virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; @@ -88,7 +89,6 @@ class VIEWS_EXPORT Slider : public View, virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE; virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE; virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; - virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE; // ui::EventHandler overrides: virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE; diff --git a/ui/views/controls/styled_label_unittest.cc b/ui/views/controls/styled_label_unittest.cc index dac53930f2..18595edf3d 100644 --- a/ui/views/controls/styled_label_unittest.cc +++ b/ui/views/controls/styled_label_unittest.cc @@ -9,6 +9,7 @@ #include "base/strings/utf_string_conversions.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/skia/include/core/SkColor.h" +#include "ui/views/border.h" #include "ui/views/controls/link.h" #include "ui/views/controls/styled_label.h" #include "ui/views/controls/styled_label_listener.h" diff --git a/ui/views/controls/textfield/native_textfield_views.cc b/ui/views/controls/textfield/native_textfield_views.cc index d02c71fe8b..f8fc36217d 100644 --- a/ui/views/controls/textfield/native_textfield_views.cc +++ b/ui/views/controls/textfield/native_textfield_views.cc @@ -180,6 +180,11 @@ void NativeTextfieldViews::OnGestureEvent(ui::GestureEvent* event) { OnAfterUserAction(); event->SetHandled(); break; + case ui::ET_GESTURE_SCROLL_END: + case ui::ET_SCROLL_FLING_START: + CreateTouchSelectionControllerAndNotifyIt(); + event->SetHandled(); + break; case ui::ET_GESTURE_TAP: if (event->details().tap_count() == 1) { CreateTouchSelectionControllerAndNotifyIt(); @@ -342,7 +347,6 @@ void NativeTextfieldViews::OnDragDone() { } void NativeTextfieldViews::OnPaint(gfx::Canvas* canvas) { - text_border_->set_has_focus(textfield_->HasFocus()); OnPaintBackground(canvas); PaintTextAndCursor(canvas); if (textfield_->draw_border()) @@ -995,25 +999,19 @@ bool NativeTextfieldViews::GetCompositionCharacterBounds( if (!HasCompositionText()) return false; const gfx::Range& composition_range = GetRenderText()->GetCompositionRange(); - const uint32 left_cursor_pos = composition_range.start() + index; - const uint32 right_cursor_pos = composition_range.start() + index + 1; DCHECK(!composition_range.is_empty()); - if (composition_range.end() < right_cursor_pos) + + size_t text_index = composition_range.start() + index; + if (composition_range.end() <= text_index) + return false; + if (!GetRenderText()->IsCursorablePosition(text_index)) { + text_index = GetRenderText()->IndexOfAdjacentGrapheme( + text_index, gfx::CURSOR_BACKWARD); + } + if (text_index < composition_range.start()) return false; - const gfx::SelectionModel start_position(left_cursor_pos, - gfx::CURSOR_BACKWARD); - const gfx::SelectionModel end_position(right_cursor_pos, - gfx::CURSOR_BACKWARD); - gfx::Rect start_cursor = GetRenderText()->GetCursorBounds(start_position, - false); - gfx::Rect end_cursor = GetRenderText()->GetCursorBounds(end_position, false); - - // TextInputClient::GetCompositionCharacterBounds is expected to fill |rect| - // in screen coordinates and GetCaretBounds returns screen coordinates. - *rect = gfx::Rect(start_cursor.x(), - start_cursor.y(), - end_cursor.x() - start_cursor.x(), - start_cursor.height()); + const gfx::SelectionModel caret(text_index, gfx::CURSOR_BACKWARD); + *rect = GetRenderText()->GetCursorBounds(caret, false); ConvertRectToScreen(this, rect); return true; diff --git a/ui/views/controls/textfield/native_textfield_views_unittest.cc b/ui/views/controls/textfield/native_textfield_views_unittest.cc index b003cce195..33196ec315 100644 --- a/ui/views/controls/textfield/native_textfield_views_unittest.cc +++ b/ui/views/controls/textfield/native_textfield_views_unittest.cc @@ -99,9 +99,10 @@ class GetTextHelper { // Convenience to make constructing a GestureEvent simpler. class GestureEventForTest : public ui::GestureEvent { public: - GestureEventForTest(ui::EventType type, int x, int y, int flags) - : GestureEvent(type, x, y, flags, base::TimeDelta(), - ui::GestureEventDetails(type, 0.0f, 0.0f), 0) { + GestureEventForTest(ui::EventType type, int x, int y, float delta_x, + float delta_y) + : GestureEvent(type, x, y, 0, base::TimeDelta(), + ui::GestureEventDetails(type, delta_x, delta_y), 0) { } private: @@ -1797,6 +1798,41 @@ TEST_F(NativeTextfieldViewsTest, GetCompositionCharacterBoundsTest) { EXPECT_FALSE(client->GetCompositionCharacterBounds(char_count + 100, &rect)); } +TEST_F(NativeTextfieldViewsTest, GetCompositionCharacterBounds_ComplexText) { + InitTextfield(Textfield::STYLE_DEFAULT); + + const char16 kUtf16Chars[] = { + // U+0020 SPACE + 0x0020, + // U+1F408 (CAT) as surrogate pair + 0xd83d, 0xdc08, + // U+5642 as Ideographic Variation Sequences + 0x5642, 0xDB40, 0xDD00, + // U+260E (BLACK TELEPHONE) as Emoji Variation Sequences + 0x260E, 0xFE0F, + // U+0020 SPACE + 0x0020, + }; + const size_t kUtf16CharsCount = arraysize(kUtf16Chars); + + ui::CompositionText composition; + composition.text.assign(kUtf16Chars, kUtf16Chars + kUtf16CharsCount); + ui::TextInputClient* client = textfield_->GetTextInputClient(); + client->SetCompositionText(composition); + + // Make sure GetCompositionCharacterBounds never fails for index. + gfx::Rect rects[kUtf16CharsCount]; + gfx::Rect prev_cursor = GetCursorBounds(); + for (uint32 i = 0; i < kUtf16CharsCount; ++i) + EXPECT_TRUE(client->GetCompositionCharacterBounds(i, &rects[i])); + + // Here we might expect the following results but it actually depends on how + // Uniscribe or HarfBuzz treats them with given font. + // - rects[1] == rects[2] + // - rects[3] == rects[4] == rects[5] + // - rects[6] == rects[7] +} + // The word we select by double clicking should remain selected regardless of // where we drag the mouse afterwards without releasing the left button. TEST_F(NativeTextfieldViewsTest, KeepInitiallySelectedWord) { @@ -1836,9 +1872,7 @@ TEST_F(NativeTextfieldViewsTest, TouchSelectionAndDraggingTest) { CommandLine::ForCurrentProcess()->AppendSwitch(switches::kEnableTouchEditing); // Tapping on the textfield should turn on the TouchSelectionController. - ui::GestureEvent tap(ui::ET_GESTURE_TAP, eventX, eventY, 0, base::TimeDelta(), - ui::GestureEventDetails(ui::ET_GESTURE_TAP, 1.0f, 0.0f), - 0); + GestureEventForTest tap(ui::ET_GESTURE_TAP, eventX, eventY, 1.0f, 0.0f); textfield_view_->OnGestureEvent(&tap); EXPECT_TRUE(GetTouchSelectionController()); @@ -1848,9 +1882,11 @@ TEST_F(NativeTextfieldViewsTest, TouchSelectionAndDraggingTest) { // With touch editing enabled, long press should not show context menu. // Instead, select word and invoke TouchSelectionController. - GestureEventForTest tap_down(ui::ET_GESTURE_TAP_DOWN, eventX, eventY, 0); + GestureEventForTest tap_down(ui::ET_GESTURE_TAP_DOWN, eventX, eventY, 0.0f, + 0.0f); textfield_view_->OnGestureEvent(&tap_down); - GestureEventForTest long_press(ui::ET_GESTURE_LONG_PRESS, eventX, eventY, 0); + GestureEventForTest long_press(ui::ET_GESTURE_LONG_PRESS, eventX, eventY, + 0.0f, 0.0f); textfield_view_->OnGestureEvent(&long_press); EXPECT_STR_EQ("hello", textfield_->GetSelectedText()); EXPECT_TRUE(GetTouchSelectionController()); @@ -1870,11 +1906,52 @@ TEST_F(NativeTextfieldViewsTest, TouchSelectionAndDraggingTest) { textfield_view_->OnGestureEvent(&tap_down); // Create a new long press event since the previous one is not marked handled. - GestureEventForTest long_press2(ui::ET_GESTURE_LONG_PRESS, eventX, eventY, 0); + GestureEventForTest long_press2(ui::ET_GESTURE_LONG_PRESS, eventX, eventY, + 0.0f, 0.0f); textfield_view_->OnGestureEvent(&long_press2); EXPECT_STR_EQ("hello", textfield_->GetSelectedText()); EXPECT_FALSE(GetTouchSelectionController()); } + +TEST_F(NativeTextfieldViewsTest, TouchScrubbingSelection) { + InitTextfield(Textfield::STYLE_DEFAULT); + textfield_->SetText(ASCIIToUTF16("hello world")); + EXPECT_FALSE(GetTouchSelectionController()); + + CommandLine::ForCurrentProcess()->AppendSwitch(switches::kEnableTouchEditing); + + // Simulate touch-scrubbing. + int scrubbing_start = GetCursorPositionX(1); + int scrubbing_end = GetCursorPositionX(6); + + GestureEventForTest tap_down(ui::ET_GESTURE_TAP_DOWN, scrubbing_start, 0, + 0.0f, 0.0f); + textfield_view_->OnGestureEvent(&tap_down); + + GestureEventForTest tap_cancel(ui::ET_GESTURE_TAP_CANCEL, scrubbing_start, 0, + 0.0f, 0.0f); + textfield_view_->OnGestureEvent(&tap_cancel); + + GestureEventForTest scroll_begin(ui::ET_GESTURE_SCROLL_BEGIN, scrubbing_start, + 0, 0.0f, 0.0f); + textfield_view_->OnGestureEvent(&scroll_begin); + + GestureEventForTest scroll_update(ui::ET_GESTURE_SCROLL_UPDATE, scrubbing_end, + 0, scrubbing_end - scrubbing_start, 0.0f); + textfield_view_->OnGestureEvent(&scroll_update); + + GestureEventForTest scroll_end(ui::ET_GESTURE_SCROLL_END, scrubbing_end, 0, + 0.0f, 0.0f); + textfield_view_->OnGestureEvent(&scroll_end); + + GestureEventForTest end(ui::ET_GESTURE_END, scrubbing_end, 0, 0.0f, 0.0f); + textfield_view_->OnGestureEvent(&end); + + // In the end, part of text should have been selected and handles should have + // appeared. + EXPECT_STR_EQ("ello ", textfield_->GetSelectedText()); + EXPECT_TRUE(GetTouchSelectionController()); +} #endif // Long_Press gesture in NativeTextfieldViews can initiate a drag and drop now. @@ -1891,8 +1968,8 @@ TEST_F(NativeTextfieldViewsTest, TestLongPressInitiatesDragDrop) { switches::kEnableTouchDragDrop); // Create a long press event in the selected region should start a drag. - GestureEventForTest long_press(ui::ET_GESTURE_LONG_PRESS, - kStringPoint.x(), kStringPoint.y(), 0); + GestureEventForTest long_press(ui::ET_GESTURE_LONG_PRESS, kStringPoint.x(), + kStringPoint.y(), 0.0f, 0.0f); textfield_view_->OnGestureEvent(&long_press); EXPECT_TRUE(textfield_view_->CanStartDragForView(NULL, kStringPoint, kStringPoint)); diff --git a/ui/views/controls/textfield/textfield.cc b/ui/views/controls/textfield/textfield.cc index de847da97f..04003ba57f 100644 --- a/ui/views/controls/textfield/textfield.cc +++ b/ui/views/controls/textfield/textfield.cc @@ -23,6 +23,7 @@ #include "ui/views/controls/textfield/native_textfield_views.h" #include "ui/views/controls/textfield/native_textfield_wrapper.h" #include "ui/views/controls/textfield/textfield_controller.h" +#include "ui/views/painter.h" #include "ui/views/views_delegate.h" #include "ui/views/widget/widget.h" @@ -78,8 +79,8 @@ Textfield::Textfield() GetDefaultTextfieldObscuredRevealDuration(); } - if (!NativeViewHost::kRenderNativeControlFocus) - set_focus_border(NULL); + if (NativeViewHost::kRenderNativeControlFocus) + focus_painter_ = Painter::CreateDashedFocusPainter(); } Textfield::Textfield(StyleFlags style) @@ -108,8 +109,8 @@ Textfield::Textfield(StyleFlags style) GetDefaultTextfieldObscuredRevealDuration(); } - if (!NativeViewHost::kRenderNativeControlFocus) - set_focus_border(NULL); + if (NativeViewHost::kRenderNativeControlFocus) + focus_painter_ = Painter::CreateDashedFocusPainter(); } Textfield::~Textfield() { @@ -407,6 +408,10 @@ void Textfield::ExecuteCommand(int command_id) { native_wrapper_->ExecuteTextCommand(command_id); } +void Textfield::SetFocusPainter(scoped_ptr<Painter> focus_painter) { + focus_painter_ = focus_painter.Pass(); +} + bool Textfield::HasTextBeingDragged() { return native_wrapper_->HasTextBeingDragged(); } @@ -449,9 +454,10 @@ bool Textfield::SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) { return e.key_code() == ui::VKEY_BACK || e.IsUnicodeKeyCode(); } -void Textfield::OnPaintFocusBorder(gfx::Canvas* canvas) { +void Textfield::OnPaint(gfx::Canvas* canvas) { + View::OnPaint(canvas); if (NativeViewHost::kRenderNativeControlFocus) - View::OnPaintFocusBorder(canvas); + Painter::PaintFocusPainter(this, canvas, focus_painter_.get()); } bool Textfield::OnKeyPressed(const ui::KeyEvent& e) { @@ -479,11 +485,17 @@ void Textfield::OnFocus() { // keyboard messages. View::OnFocus(); } + + // Border typically draws focus indicator. + SchedulePaint(); } void Textfield::OnBlur() { if (native_wrapper_) native_wrapper_->HandleBlur(); + + // Border typically draws focus indicator. + SchedulePaint(); } void Textfield::GetAccessibleState(ui::AccessibleViewState* state) { diff --git a/ui/views/controls/textfield/textfield.h b/ui/views/controls/textfield/textfield.h index 2c10b8e797..307e562c20 100644 --- a/ui/views/controls/textfield/textfield.h +++ b/ui/views/controls/textfield/textfield.h @@ -9,6 +9,7 @@ #include "base/basictypes.h" #include "base/compiler_specific.h" +#include "base/memory/scoped_ptr.h" #include "base/memory/weak_ptr.h" #include "base/strings/string16.h" #include "base/time/time.h" @@ -38,7 +39,7 @@ class TextInputClient; namespace views { class ImageView; - +class Painter; class TextfieldController; // This class implements a View that wraps a native text (edit) field. @@ -239,6 +240,8 @@ class VIEWS_EXPORT Textfield : public View { // Performs the action associated with the specified command id. void ExecuteCommand(int command_id); + void SetFocusPainter(scoped_ptr<Painter> focus_painter); + // Provided only for testing: gfx::NativeView GetTestingHandle() const { return native_wrapper_ ? native_wrapper_->GetTestingHandle() : NULL; @@ -257,7 +260,7 @@ class VIEWS_EXPORT Textfield : public View { virtual void AboutToRequestFocusFromTabTraversal(bool reverse) OVERRIDE; virtual bool SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) OVERRIDE; virtual void OnEnabledChanged() OVERRIDE; - virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE; + virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; virtual bool OnKeyPressed(const ui::KeyEvent& e) OVERRIDE; virtual bool OnKeyReleased(const ui::KeyEvent& e) OVERRIDE; virtual bool OnMouseDragged(const ui::MouseEvent& e) OVERRIDE; @@ -343,6 +346,8 @@ class VIEWS_EXPORT Textfield : public View { // Used to bind callback functions to this object. base::WeakPtrFactory<Textfield> weak_ptr_factory_; + scoped_ptr<Painter> focus_painter_; + DISALLOW_COPY_AND_ASSIGN(Textfield); }; diff --git a/ui/views/controls/tree/tree_view.cc b/ui/views/controls/tree/tree_view.cc index 78d4693e4a..055b9b9c2a 100644 --- a/ui/views/controls/tree/tree_view.cc +++ b/ui/views/controls/tree/tree_view.cc @@ -42,6 +42,9 @@ static const int kTextHorizontalPadding = 2; // How much children are indented from their parent. static const int kIndent = 20; +// static +const char TreeView::kViewClassName[] = "TreeView"; + namespace { // Returns the color id for the background of selected text. |has_focus| @@ -238,6 +241,12 @@ void TreeView::SetSelectedNode(TreeModelNode* model_node) { // remove explicitly resetting selected_node_ before invoking this. if (controller_ && (changed || was_empty_selection)) controller_->OnTreeViewSelectionChanged(this); + + if (changed) { + // TODO(dmazzoni): Decide if EVENT_SELECTION_CHANGED is a better choice for + // sub-item selection event. + NotifyAccessibilityEvent(ui::AccessibilityTypes::EVENT_FOCUS, true); + } } TreeModelNode* TreeView::GetSelectedNode() { @@ -381,7 +390,7 @@ void TreeView::ShowContextMenu(const gfx::Point& p, // Only invoke View's implementation (which notifies the // ContextMenuController) if over a node. gfx::Point local_point(p); - ConvertPointToTarget(NULL, this, &local_point); + ConvertPointFromScreen(this, &local_point); int row = (local_point.y() - kVerticalInset) / row_height_; int depth = 0; InternalNode* node = GetNodeByRow(row, &depth); @@ -397,6 +406,16 @@ void TreeView::ShowContextMenu(const gfx::Point& p, void TreeView::GetAccessibleState(ui::AccessibleViewState* state) { state->role = ui::AccessibilityTypes::ROLE_OUTLINE; state->state = ui::AccessibilityTypes::STATE_READONLY; + if (!selected_node_) + return; + + // Get selected item info. + state->role = ui::AccessibilityTypes::ROLE_OUTLINEITEM; + state->name = selected_node_->model_node()->GetTitle(); +} + +const char* TreeView::GetClassName() const { + return kViewClassName; } void TreeView::TreeNodesAdded(TreeModel* model, diff --git a/ui/views/controls/tree/tree_view.h b/ui/views/controls/tree/tree_view.h index da2a5205a6..de571c789b 100644 --- a/ui/views/controls/tree/tree_view.h +++ b/ui/views/controls/tree/tree_view.h @@ -36,6 +36,9 @@ class VIEWS_EXPORT TreeView : public ui::TreeModelObserver, public FocusChangeListener, public PrefixDelegate { public: + // The tree view's class name. + static const char kViewClassName[]; + TreeView(); virtual ~TreeView(); @@ -122,6 +125,7 @@ class VIEWS_EXPORT TreeView : public ui::TreeModelObserver, virtual void ShowContextMenu(const gfx::Point& p, ui::MenuSourceType source_type) OVERRIDE; virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; + virtual const char* GetClassName() const OVERRIDE; // TreeModelObserver overrides: virtual void TreeNodesAdded(ui::TreeModel* model, diff --git a/ui/views/controls/webview/web_dialog_view.cc b/ui/views/controls/webview/web_dialog_view.cc index 079200cfac..7f88f022f5 100644 --- a/ui/views/controls/webview/web_dialog_view.cc +++ b/ui/views/controls/webview/web_dialog_view.cc @@ -100,6 +100,11 @@ void WebDialogView::ViewHierarchyChanged( } bool WebDialogView::CanClose() { + // Don't close UI if |delegate_| does not allow users to close it by + // clicking on "x" button or pressing Esc shortcut key on hosting dialog. + if (!delegate_->CanCloseDialog() && !close_contents_called_) + return false; + // If CloseContents() is called before CanClose(), which is called by // RenderViewHostImpl::ClosePageIgnoringUnloadEvents, it indicates // beforeunload event should not be fired during closing. diff --git a/ui/views/controls/webview/webview.cc b/ui/views/controls/webview/webview.cc index eef661f3fe..f2ea02f48f 100644 --- a/ui/views/controls/webview/webview.cc +++ b/ui/views/controls/webview/webview.cc @@ -35,8 +35,6 @@ WebView::WebView(content::BrowserContext* browser_context) is_embedding_fullscreen_widget_(false), browser_context_(browser_context), allow_accelerators_(false) { - // WebView shouldn't render focus. - set_focus_border(NULL); AddChildView(wcv_holder_); NativeViewAccessibility::RegisterWebView(this); } diff --git a/ui/views/corewm/capture_controller_unittest.cc b/ui/views/corewm/capture_controller_unittest.cc index f6ac7b378e..558a4030f5 100644 --- a/ui/views/corewm/capture_controller_unittest.cc +++ b/ui/views/corewm/capture_controller_unittest.cc @@ -166,8 +166,7 @@ TEST_F(CaptureControllerTest, TouchTargetResetOnCaptureChange) { ui::ET_TOUCH_PRESSED, gfx::Point(), 0, 0, ui::EventTimeForNow(), 1.0f, 1.0f, 1.0f, 1.0f); EXPECT_EQ(static_cast<ui::GestureConsumer*>(w2.get()), - ui::GestureRecognizer::Get()->GetTouchLockedTarget( - &touch_event)); + ui::GestureRecognizer::Get()->GetTouchLockedTarget(touch_event)); } } // namespace views diff --git a/ui/views/corewm/tooltip_aura.cc b/ui/views/corewm/tooltip_aura.cc index 7988ebee57..7c11bd80bb 100644 --- a/ui/views/corewm/tooltip_aura.cc +++ b/ui/views/corewm/tooltip_aura.cc @@ -11,6 +11,8 @@ #include "ui/base/resource/resource_bundle.h" #include "ui/gfx/screen.h" #include "ui/gfx/text_elider.h" +#include "ui/views/background.h" +#include "ui/views/border.h" #include "ui/views/corewm/corewm_switches.h" #include "ui/views/widget/widget.h" diff --git a/ui/views/corewm/tooltip_controller.cc b/ui/views/corewm/tooltip_controller.cc index 9d1abf9a83..b411688397 100644 --- a/ui/views/corewm/tooltip_controller.cc +++ b/ui/views/corewm/tooltip_controller.cc @@ -227,7 +227,6 @@ void TooltipController::OnWindowDestroyed(aura::Window* window) { if (tooltip_window_ == window) { tooltip_->Hide(); tooltip_shown_timeout_map_.erase(tooltip_window_); - tooltip_window_->RemoveObserver(this); tooltip_window_ = NULL; } } diff --git a/ui/views/event_utils.h b/ui/views/event_utils.h index 3527c507d4..095487b152 100644 --- a/ui/views/event_utils.h +++ b/ui/views/event_utils.h @@ -20,6 +20,12 @@ namespace views { VIEWS_EXPORT bool RepostLocatedEvent(gfx::NativeWindow window, const ui::LocatedEvent& event); +#if defined(OS_WIN) && defined(USE_AURA) +// Reposts a located event to the HWND passed in. +VIEWS_EXPORT bool RepostLocatedEventWin(HWND window, + const ui::LocatedEvent& event); +#endif + } // namespace views #endif // UI_VIEWS_EVENT_UTILS_H_ diff --git a/ui/views/event_utils_aura.cc b/ui/views/event_utils_aura.cc index 9a42656a3d..e3d07d9f31 100644 --- a/ui/views/event_utils_aura.cc +++ b/ui/views/event_utils_aura.cc @@ -10,6 +10,7 @@ #include "ui/aura/root_window.h" #include "ui/events/event.h" #include "ui/gfx/point.h" +#include "ui/views/views_delegate.h" using aura::client::ScreenPositionClient; @@ -20,6 +21,13 @@ bool RepostLocatedEvent(gfx::NativeWindow window, if (!window) return false; +#if defined(OS_WIN) + if (ViewsDelegate::views_delegate && + !ViewsDelegate::views_delegate->IsWindowInMetro(window)) { + return RepostLocatedEventWin( + window->GetDispatcher()->host()->GetAcceleratedWidget(), event); + } +#endif aura::Window* root_window = window->GetRootWindow(); gfx::Point root_loc(event.location()); diff --git a/ui/views/event_utils_win.cc b/ui/views/event_utils_win.cc index 38c05c988f..3e908889df 100644 --- a/ui/views/event_utils_win.cc +++ b/ui/views/event_utils_win.cc @@ -13,8 +13,13 @@ namespace views { -bool RepostLocatedEvent(gfx::NativeWindow window, +#if defined(USE_AURA) +bool RepostLocatedEventWin(HWND window, + const ui::LocatedEvent& event) { +#else +bool RepostLocatedEvent(gfx::NativeWindow window const ui::LocatedEvent& event) { +#endif if (!window) return false; @@ -45,10 +50,10 @@ bool RepostLocatedEvent(gfx::NativeWindow window, int window_x = screen_loc.x(); int window_y = screen_loc.y(); if (in_client_area) { - RECT window_bounds; - GetWindowRect(window, &window_bounds); - window_x -= window_bounds.left; - window_y -= window_bounds.top; + POINT pt = {window_x, window_y}; + ScreenToClient(window, &pt); + window_x = pt.x; + window_y = pt.y; } WPARAM target = in_client_area ? event.native_event().wParam : nc_hit_result; diff --git a/ui/views/examples/button_example.cc b/ui/views/examples/button_example.cc index de81072d9e..eecba5833e 100644 --- a/ui/views/examples/button_example.cc +++ b/ui/views/examples/button_example.cc @@ -8,6 +8,7 @@ #include "grit/ui_resources.h" #include "ui/base/resource/resource_bundle.h" #include "ui/gfx/image/image.h" +#include "ui/views/background.h" #include "ui/views/controls/button/blue_button.h" #include "ui/views/controls/button/image_button.h" #include "ui/views/controls/button/label_button.h" diff --git a/ui/views/examples/double_split_view_example.cc b/ui/views/examples/double_split_view_example.cc index 2bac8e180b..fb1f099a1f 100644 --- a/ui/views/examples/double_split_view_example.cc +++ b/ui/views/examples/double_split_view_example.cc @@ -4,6 +4,7 @@ #include "ui/views/examples/double_split_view_example.h" +#include "ui/views/background.h" #include "ui/views/controls/single_split_view.h" #include "ui/views/layout/grid_layout.h" diff --git a/ui/views/examples/examples_main.cc b/ui/views/examples/examples_main.cc index 4880469269..28864c477c 100644 --- a/ui/views/examples/examples_main.cc +++ b/ui/views/examples/examples_main.cc @@ -2,6 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/at_exit.h" +#include "base/command_line.h" +#include "base/message_loop/message_loop.h" +#include "base/run_loop.h" + int main(int argc, char** argv) { + base::AtExitManager at_exit; + CommandLine::Init(argc, argv); + + base::MessageLoop message_loop(base::MessageLoop::TYPE_UI); + + base::RunLoop().Run(); + return 0; } diff --git a/ui/views/examples/examples_window.cc b/ui/views/examples/examples_window.cc index 52f8c7dc3e..041199286d 100644 --- a/ui/views/examples/examples_window.cc +++ b/ui/views/examples/examples_window.cc @@ -10,6 +10,7 @@ #include "base/strings/utf_string_conversions.h" #include "ui/base/models/combobox_model.h" #include "ui/base/ui_base_paths.h" +#include "ui/views/background.h" #include "ui/views/controls/combobox/combobox.h" #include "ui/views/controls/label.h" #include "ui/views/examples/bubble_example.h" diff --git a/ui/views/examples/examples_window_with_content.cc b/ui/views/examples/examples_window_with_content.cc index 6f297c1d1b..3cfe14bbad 100644 --- a/ui/views/examples/examples_window_with_content.cc +++ b/ui/views/examples/examples_window_with_content.cc @@ -11,6 +11,7 @@ #include "content/public/browser/browser_context.h" #include "ui/base/models/combobox_model.h" #include "ui/base/ui_base_paths.h" +#include "ui/views/background.h" #include "ui/views/controls/combobox/combobox.h" #include "ui/views/controls/label.h" #include "ui/views/examples/bubble_example.h" diff --git a/ui/views/examples/multiline_example.cc b/ui/views/examples/multiline_example.cc index da362f00de..b192384638 100644 --- a/ui/views/examples/multiline_example.cc +++ b/ui/views/examples/multiline_example.cc @@ -7,6 +7,8 @@ #include "base/strings/utf_string_conversions.h" #include "ui/events/event.h" #include "ui/gfx/render_text.h" +#include "ui/views/background.h" +#include "ui/views/border.h" #include "ui/views/controls/label.h" #include "ui/views/controls/textfield/textfield.h" #include "ui/views/layout/grid_layout.h" diff --git a/ui/views/examples/scroll_view_example.cc b/ui/views/examples/scroll_view_example.cc index b2d7bd6ddf..38b18fc5e7 100644 --- a/ui/views/examples/scroll_view_example.cc +++ b/ui/views/examples/scroll_view_example.cc @@ -6,6 +6,7 @@ #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" +#include "ui/views/background.h" #include "ui/views/controls/button/label_button.h" #include "ui/views/controls/button/radio_button.h" #include "ui/views/layout/grid_layout.h" diff --git a/ui/views/examples/single_split_view_example.cc b/ui/views/examples/single_split_view_example.cc index 70e4b19875..97fb36b798 100644 --- a/ui/views/examples/single_split_view_example.cc +++ b/ui/views/examples/single_split_view_example.cc @@ -4,6 +4,7 @@ #include "ui/views/examples/single_split_view_example.h" +#include "ui/views/background.h" #include "ui/views/controls/single_split_view.h" #include "ui/views/layout/grid_layout.h" diff --git a/ui/views/examples/text_example.cc b/ui/views/examples/text_example.cc index e0f2352d1c..ec43ac15b9 100644 --- a/ui/views/examples/text_example.cc +++ b/ui/views/examples/text_example.cc @@ -8,6 +8,7 @@ #include "ui/base/resource/resource_bundle.h" #include "ui/gfx/canvas.h" #include "ui/gfx/font_list.h" +#include "ui/views/border.h" #include "ui/views/controls/button/checkbox.h" #include "ui/views/controls/combobox/combobox.h" #include "ui/views/controls/label.h" diff --git a/ui/views/examples/widget_example.cc b/ui/views/examples/widget_example.cc index e50700030a..3722ba0467 100644 --- a/ui/views/examples/widget_example.cc +++ b/ui/views/examples/widget_example.cc @@ -5,6 +5,7 @@ #include "ui/views/examples/widget_example.h" #include "base/strings/utf_string_conversions.h" +#include "ui/views/background.h" #include "ui/views/controls/button/label_button.h" #include "ui/views/controls/label.h" #include "ui/views/layout/box_layout.h" diff --git a/ui/views/focus/focus_traversal_unittest.cc b/ui/views/focus/focus_traversal_unittest.cc index e3f93e7f92..03bf165daa 100644 --- a/ui/views/focus/focus_traversal_unittest.cc +++ b/ui/views/focus/focus_traversal_unittest.cc @@ -8,6 +8,8 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" #include "ui/base/models/combobox_model.h" +#include "ui/views/background.h" +#include "ui/views/border.h" #include "ui/views/controls/button/checkbox.h" #include "ui/views/controls/button/label_button.h" #include "ui/views/controls/button/radio_button.h" diff --git a/ui/views/focus_border.cc b/ui/views/focus_border.cc deleted file mode 100644 index 68fd430750..0000000000 --- a/ui/views/focus_border.cc +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2012 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. - -#include "ui/views/focus_border.h" - -#include "ui/gfx/canvas.h" -#include "ui/gfx/rect.h" -#include "ui/views/view.h" - -namespace views { -namespace { -class DashedFocusBorder : public FocusBorder { - public: - DashedFocusBorder( - int left_inset, int top_inset, int right_inset, int bottom_inset) - : left_inset_(left_inset), - top_inset_(top_inset), - right_inset_(right_inset), - bottom_inset_(bottom_inset) { - } - - virtual void Paint(const View& view, gfx::Canvas* canvas) const OVERRIDE { - gfx::Rect rect(view.GetLocalBounds()); - rect.Inset(left_inset_, top_inset_, right_inset_, bottom_inset_); - canvas->DrawFocusRect(rect); - } - - private: - int left_inset_; - int top_inset_; - int right_inset_; - int bottom_inset_; - - DISALLOW_COPY_AND_ASSIGN(DashedFocusBorder); -}; -} // namespace - -FocusBorder::~FocusBorder() { -} - -// static -FocusBorder* FocusBorder::CreateDashedFocusBorder() { - return new DashedFocusBorder(0, 0, 0, 0); -} - -// static -FocusBorder* FocusBorder::CreateDashedFocusBorder( - int left, int top, int right, int bottom) { - return new DashedFocusBorder(left, top, right, bottom); -} - -FocusBorder::FocusBorder() { -} - -} // namespace views diff --git a/ui/views/focus_border.h b/ui/views/focus_border.h deleted file mode 100644 index 15a3477883..0000000000 --- a/ui/views/focus_border.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2012 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. - -#ifndef UI_VIEWS_FOCUS_BORDER_H_ -#define UI_VIEWS_FOCUS_BORDER_H_ - -#include "ui/views/views_export.h" -#include "base/basictypes.h" - -namespace gfx { -class Canvas; -} - -namespace views { -class View; - -//////////////////////////////////////////////////////////////////////////////// -// -// Focus border class. -// -// The focus border class is used to display an indication of focus on a view. -// To set a focus border on a view, call SetFocusBorder on the view. Once set -// on a view, the focus border is owned by the view. -// -//////////////////////////////////////////////////////////////////////////////// - -class VIEWS_EXPORT FocusBorder { - public: - virtual ~FocusBorder(); - - // Creates the default inset dashed line focus border. - static FocusBorder* CreateDashedFocusBorder(); - static FocusBorder* CreateDashedFocusBorder( - int left, int top, int right, int bottom); - - // Renders the focus border for the specified view. - virtual void Paint(const View& view, gfx::Canvas* canvas) const = 0; - - protected: - FocusBorder(); - - private: - DISALLOW_COPY_AND_ASSIGN(FocusBorder); -}; - -} // namespace views - -#endif // UI_VIEWS_FOCUS_BORDER_H_ diff --git a/ui/views/ime/input_method_bridge_unittest.cc b/ui/views/ime/input_method_bridge_unittest.cc index 64a1247073..64144cf450 100644 --- a/ui/views/ime/input_method_bridge_unittest.cc +++ b/ui/views/ime/input_method_bridge_unittest.cc @@ -5,7 +5,7 @@ #include "ui/aura/client/aura_constants.h" #include "ui/aura/window.h" #include "ui/base/ime/dummy_input_method_delegate.h" -#include "ui/base/ime/fake_input_method.h" +#include "ui/base/ime/input_method_minimal.h" #include "ui/base/ime/text_input_client.h" #include "ui/views/ime/input_method.h" #include "ui/views/test/views_test_base.h" @@ -19,7 +19,7 @@ typedef ViewsTestBase InputMethodBridgeTest; TEST_F(InputMethodBridgeTest, DestructTest) { ui::internal::DummyInputMethodDelegate input_method_delegate; - ui::FakeInputMethod input_method(&input_method_delegate); + ui::InputMethodMinimal input_method(&input_method_delegate); GetContext()->SetProperty(aura::client::kRootWindowInputMethodKey, static_cast<ui::InputMethod*>(&input_method)); diff --git a/ui/views/linux_ui/linux_ui.h b/ui/views/linux_ui/linux_ui.h index 8355e98776..152b364282 100644 --- a/ui/views/linux_ui/linux_ui.h +++ b/ui/views/linux_ui/linux_ui.h @@ -103,6 +103,9 @@ class VIEWS_EXPORT LinuxUI : public ui::LinuxInputMethodContextFactory, // Removes the observer from the LinuxUI's list. virtual void RemoveWindowButtonOrderObserver( WindowButtonOrderObserver* observer) = 0; + + // Determines whether the user's window manager is Unity. + virtual bool UnityIsRunning() = 0; }; } // namespace views diff --git a/ui/views/painter.cc b/ui/views/painter.cc index ce84a58e8d..b6a2e7d4c6 100644 --- a/ui/views/painter.cc +++ b/ui/views/painter.cc @@ -15,12 +15,83 @@ #include "ui/gfx/insets.h" #include "ui/gfx/point.h" #include "ui/gfx/rect.h" - +#include "ui/views/view.h" namespace views { namespace { +// DashedFocusPainter ---------------------------------------------------------- + +class DashedFocusPainter : public Painter { + public: + explicit DashedFocusPainter(const gfx::Insets& insets); + virtual ~DashedFocusPainter(); + + // Painter: + virtual gfx::Size GetMinimumSize() const OVERRIDE; + virtual void Paint(gfx::Canvas* canvas, const gfx::Size& size) OVERRIDE; + + private: + const gfx::Insets insets_; + + DISALLOW_COPY_AND_ASSIGN(DashedFocusPainter); +}; + +DashedFocusPainter::DashedFocusPainter(const gfx::Insets& insets) + : insets_(insets) { +} + +DashedFocusPainter::~DashedFocusPainter() { +} + +gfx::Size DashedFocusPainter::GetMinimumSize() const { + return gfx::Size(); +} + +void DashedFocusPainter::Paint(gfx::Canvas* canvas, const gfx::Size& size) { + gfx::Rect rect(size); + rect.Inset(insets_); + canvas->DrawFocusRect(rect); +} + +// SolidFocusPainter ----------------------------------------------------------- + +class SolidFocusPainter : public Painter { + public: + SolidFocusPainter(SkColor color, const gfx::Insets& insets); + virtual ~SolidFocusPainter(); + + // Painter: + virtual gfx::Size GetMinimumSize() const OVERRIDE; + virtual void Paint(gfx::Canvas* canvas, const gfx::Size& size) OVERRIDE; + + private: + const SkColor color_; + const gfx::Insets insets_; + + DISALLOW_COPY_AND_ASSIGN(SolidFocusPainter); +}; + +SolidFocusPainter::SolidFocusPainter(SkColor color, + const gfx::Insets& insets) + : color_(color), + insets_(insets) { +} + +SolidFocusPainter::~SolidFocusPainter() { +} + +gfx::Size SolidFocusPainter::GetMinimumSize() const { + return gfx::Size(); +} + +void SolidFocusPainter::Paint(gfx::Canvas* canvas, const gfx::Size& size) { + gfx::Rect rect(size); + rect.Inset(insets_); + canvas->DrawSolidFocusRect(rect, color_); +} + // GradientPainter ------------------------------------------------------------ class GradientPainter : public Painter { @@ -88,7 +159,6 @@ void GradientPainter::Paint(gfx::Canvas* canvas, const gfx::Size& size) { SkIntToScalar(size.height()), paint); } - // ImagePainter --------------------------------------------------------------- // ImagePainter stores and paints nine images as a scalable grid. @@ -239,6 +309,14 @@ void Painter::PaintPainterAt(gfx::Canvas* canvas, } // static +void Painter::PaintFocusPainter(View* view, + gfx::Canvas* canvas, + Painter* focus_painter) { + if (focus_painter && view->HasFocus()) + PaintPainterAt(canvas, focus_painter, view->GetLocalBounds()); +} + +// static Painter* Painter::CreateHorizontalGradient(SkColor c1, SkColor c2) { SkColor colors[2]; colors[0] = c1; @@ -274,6 +352,23 @@ Painter* Painter::CreateImageGridPainter(const int image_ids[]) { return new ImagePainter(image_ids); } +// static +scoped_ptr<Painter> Painter::CreateDashedFocusPainter() { + return scoped_ptr<Painter>(new DashedFocusPainter(gfx::Insets())).Pass(); +} + +// static +scoped_ptr<Painter> Painter::CreateDashedFocusPainterWithInsets( + const gfx::Insets& insets) { + return scoped_ptr<Painter>(new DashedFocusPainter(insets)).Pass(); +} + +// static +scoped_ptr<Painter> Painter::CreateSolidFocusPainter( + SkColor color, + const gfx::Insets& insets) { + return scoped_ptr<Painter>(new SolidFocusPainter(color, insets)).Pass(); +} // HorizontalPainter ---------------------------------------------------------- diff --git a/ui/views/painter.h b/ui/views/painter.h index c0ff443d3a..3799e91e86 100644 --- a/ui/views/painter.h +++ b/ui/views/painter.h @@ -7,6 +7,7 @@ #include "base/basictypes.h" #include "base/compiler_specific.h" +#include "base/memory/scoped_ptr.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/views/views_export.h" @@ -25,6 +26,8 @@ class Size; namespace views { +class View; + // Painter, as the name implies, is responsible for painting in a particular // region. Think of Painter as a Border or Background that can be painted // in any region of a View. @@ -39,6 +42,12 @@ class VIEWS_EXPORT Painter { Painter* painter, const gfx::Rect& rect); + // Convenience that paints |focus_painter| only if |view| HasFocus() and + // |focus_painter| is non-NULL. + static void PaintFocusPainter(View* view, + gfx::Canvas* canvas, + Painter* focus_painter); + // Creates a painter that draws a gradient between the two colors. static Painter* CreateHorizontalGradient(SkColor c1, SkColor c2); static Painter* CreateVerticalGradient(SkColor c1, SkColor c2); @@ -65,6 +74,13 @@ class VIEWS_EXPORT Painter { // Top-Left/Top/Top-Right/Left/[Center]/Right/Bottom-Left/Bottom/Bottom-Right. static Painter* CreateImageGridPainter(const int image_ids[]); + // Factory methods for creating painters intended for rendering focus. + static scoped_ptr<Painter> CreateDashedFocusPainter(); + static scoped_ptr<Painter> CreateDashedFocusPainterWithInsets( + const gfx::Insets& insets); + static scoped_ptr<Painter> CreateSolidFocusPainter(SkColor color, + const gfx::Insets& insets); + // Returns the minimum size this painter can paint without obvious graphical // problems (e.g. overlapping images). virtual gfx::Size GetMinimumSize() const = 0; diff --git a/ui/views/shadow_border.cc b/ui/views/shadow_border.cc index 3513e77df3..3cd21c9660 100644 --- a/ui/views/shadow_border.cc +++ b/ui/views/shadow_border.cc @@ -6,8 +6,10 @@ #include "ui/gfx/canvas.h" #include "ui/gfx/insets.h" +#include "ui/gfx/rect.h" #include "ui/gfx/shadow_value.h" #include "ui/gfx/skia_util.h" +#include "ui/views/view.h" namespace views { diff --git a/ui/views/test/menu_runner_test_api.cc b/ui/views/test/menu_runner_test_api.cc new file mode 100644 index 0000000000..c2977000d8 --- /dev/null +++ b/ui/views/test/menu_runner_test_api.cc @@ -0,0 +1,26 @@ +// Copyright 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. + +#include "ui/views/test/menu_runner_test_api.h" + +#include "ui/views/controls/menu/menu_runner.h" +#include "ui/views/controls/menu/menu_runner_handler.h" + +namespace views { +namespace test { + +MenuRunnerTestAPI::MenuRunnerTestAPI(MenuRunner* menu_runner) + : menu_runner_(menu_runner) { +} + +MenuRunnerTestAPI::~MenuRunnerTestAPI() { +} + +void MenuRunnerTestAPI::SetMenuRunnerHandler( + scoped_ptr<MenuRunnerHandler> menu_runner_handler) { + menu_runner_->SetRunnerHandler(menu_runner_handler.Pass()); +} + +} // test +} // views diff --git a/ui/views/test/menu_runner_test_api.h b/ui/views/test/menu_runner_test_api.h new file mode 100644 index 0000000000..a9e2b8e8fb --- /dev/null +++ b/ui/views/test/menu_runner_test_api.h @@ -0,0 +1,37 @@ +// Copyright 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. + +#ifndef UI_VIEWS_TEST_MENU_RUNNER_TEST_API_H_ +#define UI_VIEWS_TEST_MENU_RUNNER_TEST_API_H_ + +#include "base/basictypes.h" +#include "base/memory/scoped_ptr.h" + +namespace views { + +class MenuRunner; +class MenuRunnerHandler; + +namespace test { + +// A wrapper of MenuRunner to use testing methods of MenuRunner. +class MenuRunnerTestAPI { + public: + explicit MenuRunnerTestAPI(MenuRunner* menu_runner); + ~MenuRunnerTestAPI(); + + // Sets the menu runner handler. + void SetMenuRunnerHandler(scoped_ptr<MenuRunnerHandler> menu_runner_handler); + + private: + MenuRunner* menu_runner_; + + DISALLOW_COPY_AND_ASSIGN(MenuRunnerTestAPI); +}; + +} // namespace test + +} // namespace views + +#endif // UI_VIEWS_TEST_MENU_RUNNER_TEST_API_H_ diff --git a/ui/views/test/test_views_delegate.h b/ui/views/test/test_views_delegate.h index 913766a07a..7816b687f2 100644 --- a/ui/views/test/test_views_delegate.h +++ b/ui/views/test/test_views_delegate.h @@ -50,6 +50,10 @@ class TestViewsDelegate : public ViewsDelegate { virtual HICON GetDefaultWindowIcon() const OVERRIDE { return NULL; } + + virtual bool IsWindowInMetro(gfx::NativeWindow window) const { + return false; + } #elif defined(OS_LINUX) && !defined(OS_CHROMEOS) virtual gfx::ImageSkia* GetDefaultWindowIcon() const OVERRIDE; #endif diff --git a/ui/views/view.cc b/ui/views/view.cc index 7157509735..ee4ed58da3 100644 --- a/ui/views/view.cc +++ b/ui/views/view.cc @@ -22,6 +22,7 @@ #include "ui/compositor/compositor.h" #include "ui/compositor/layer.h" #include "ui/compositor/layer_animator.h" +#include "ui/events/event_target_iterator.h" #include "ui/gfx/canvas.h" #include "ui/gfx/interpolated_transform.h" #include "ui/gfx/path.h" @@ -35,6 +36,7 @@ #include "ui/native_theme/native_theme.h" #include "ui/views/accessibility/native_view_accessibility.h" #include "ui/views/background.h" +#include "ui/views/border.h" #include "ui/views/context_menu_controller.h" #include "ui/views/drag_controller.h" #include "ui/views/layout/layout_manager.h" @@ -160,7 +162,6 @@ View::View() registered_for_visible_bounds_notification_(false), clip_insets_(0, 0, 0, 0), needs_layout_(true), - focus_border_(FocusBorder::CreateDashedFocusBorder()), flip_canvas_on_paint_for_rtl_ui_(false), paint_to_layer_(false), accelerator_focus_manager_(NULL), @@ -663,52 +664,38 @@ View* View::GetSelectedViewForGroup(int group) { void View::ConvertPointToTarget(const View* source, const View* target, gfx::Point* point) { + DCHECK(source); + DCHECK(target); if (source == target) return; - // |source| can be NULL. const View* root = GetHierarchyRoot(target); - if (source) { - CHECK_EQ(GetHierarchyRoot(source), root); + CHECK_EQ(GetHierarchyRoot(source), root); - if (source != root) - source->ConvertPointForAncestor(root, point); - } + if (source != root) + source->ConvertPointForAncestor(root, point); if (target != root) target->ConvertPointFromAncestor(root, point); - - // API defines NULL |source| as returning the point in screen coordinates. - if (!source) { - *point -= - root->GetWidget()->GetClientAreaBoundsInScreen().OffsetFromOrigin(); - } } // static void View::ConvertRectToTarget(const View* source, const View* target, gfx::RectF* rect) { + DCHECK(source); + DCHECK(target); if (source == target) return; - // |source| can be NULL. const View* root = GetHierarchyRoot(target); - if (source) { - CHECK_EQ(GetHierarchyRoot(source), root); + CHECK_EQ(GetHierarchyRoot(source), root); - if (source != root) - source->ConvertRectForAncestor(root, rect); - } + if (source != root) + source->ConvertRectForAncestor(root, rect); if (target != root) target->ConvertRectFromAncestor(root, rect); - - // API defines NULL |source| as returning the point in screen coordinates. - if (!source) { - rect->set_origin(rect->origin() - - root->GetWidget()->GetClientAreaBoundsInScreen().OffsetFromOrigin()); - } } // static @@ -813,6 +800,14 @@ void View::Paint(gfx::Canvas* canvas) { PaintCommon(canvas); } +void View::set_background(Background* b) { + background_.reset(b); +} + +void View::set_border(Border* b) { + border_.reset(b); +} + ui::ThemeProvider* View::GetThemeProvider() const { const Widget* widget = GetWidget(); return widget ? widget->GetThemeProvider() : NULL; @@ -993,7 +988,7 @@ bool View::IsMouseHovered() { gfx::Point cursor_pos(gfx::Screen::GetScreenFor( GetWidget()->GetNativeView())->GetCursorScreenPoint()); - ConvertPointToTarget(NULL, this, &cursor_pos); + ConvertPointFromScreen(this, &cursor_pos); return HitTestPoint(cursor_pos); } @@ -1118,6 +1113,15 @@ ui::EventTarget* View::GetParentTarget() { return parent_; } +scoped_ptr<ui::EventTargetIterator> View::GetChildIterator() const { + return scoped_ptr<ui::EventTargetIterator>( + new ui::EventTargetIteratorImpl<View>(children_)); +} + +ui::EventTargeter* View::GetEventTargeter() { + return NULL; +} + // Accelerators ---------------------------------------------------------------- void View::AddAccelerator(const ui::Accelerator& accelerator) { @@ -1394,7 +1398,6 @@ void View::PaintChildren(gfx::Canvas* canvas) { void View::OnPaint(gfx::Canvas* canvas) { TRACE_EVENT1("views", "View::OnPaint", "class", GetClassName()); OnPaintBackground(canvas); - OnPaintFocusBorder(canvas); OnPaintBorder(canvas); } @@ -1416,15 +1419,6 @@ void View::OnPaintBorder(gfx::Canvas* canvas) { } } -void View::OnPaintFocusBorder(gfx::Canvas* canvas) { - if (focus_border_.get() && HasFocus()) { - TRACE_EVENT2("views", "views::OnPaintFocusBorder", - "width", canvas->sk_canvas()->getDevice()->width(), - "height", canvas->sk_canvas()->getDevice()->height()); - focus_border_->Paint(*this, canvas); - } -} - // Accelerated Painting -------------------------------------------------------- void View::SetFillsBoundsOpaquely(bool fills_bounds_opaquely) { @@ -1596,14 +1590,10 @@ void View::OnBlur() { } void View::Focus() { - if (focus_border_.get()) - SchedulePaint(); OnFocus(); } void View::Blur() { - if (focus_border_.get()) - SchedulePaint(); OnBlur(); } diff --git a/ui/views/view.h b/ui/views/view.h index ef60e84a58..e391dbe6b8 100644 --- a/ui/views/view.h +++ b/ui/views/view.h @@ -26,12 +26,11 @@ #include "ui/compositor/layer_owner.h" #include "ui/events/event.h" #include "ui/events/event_target.h" +#include "ui/gfx/insets.h" #include "ui/gfx/native_widget_types.h" #include "ui/gfx/rect.h" #include "ui/gfx/vector2d.h" -#include "ui/views/background.h" -#include "ui/views/border.h" -#include "ui/views/focus_border.h" +#include "ui/views/views_export.h" #if defined(OS_WIN) #include "base/win/scoped_comptr.h" @@ -62,7 +61,6 @@ class Background; class Border; class ContextMenuController; class DragController; -class FocusBorder; class FocusManager; class FocusTraversable; class InputMethod; @@ -456,7 +454,7 @@ class VIEWS_EXPORT View : public ui::LayerDelegate, // // |source| and |target| must be in the same widget, but doesn't need to be in // the same view hierarchy. - // |source| can be NULL in which case it means the screen coordinate system. + // Neither |source| nor |target| can be NULL. static void ConvertPointToTarget(const View* source, const View* target, gfx::Point* point); @@ -466,7 +464,7 @@ class VIEWS_EXPORT View : public ui::LayerDelegate, // // |source| and |target| must be in the same widget, but doesn't need to be in // the same view hierarchy. - // |source| can be NULL in which case it means the screen coordinate system. + // Neither |source| nor |target| can be NULL. static void ConvertRectToTarget(const View* source, const View* target, gfx::RectF* rect); @@ -510,20 +508,15 @@ class VIEWS_EXPORT View : public ui::LayerDelegate, virtual void Paint(gfx::Canvas* canvas); // The background object is owned by this object and may be NULL. - void set_background(Background* b) { background_.reset(b); } + void set_background(Background* b); const Background* background() const { return background_.get(); } Background* background() { return background_.get(); } // The border object is owned by this object and may be NULL. - void set_border(Border* b) { border_.reset(b); } + void set_border(Border* b); const Border* border() const { return border_.get(); } Border* border() { return border_.get(); } - // The focus_border object is owned by this object and may be NULL. - void set_focus_border(FocusBorder* b) { focus_border_.reset(b); } - const FocusBorder* focus_border() const { return focus_border_.get(); } - FocusBorder* focus_border() { return focus_border_.get(); } - // Get the theme provider from the parent widget. virtual ui::ThemeProvider* GetThemeProvider() const; @@ -722,6 +715,8 @@ class VIEWS_EXPORT View : public ui::LayerDelegate, // Overridden from ui::EventTarget: virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE; virtual ui::EventTarget* GetParentTarget() OVERRIDE; + virtual scoped_ptr<ui::EventTargetIterator> GetChildIterator() const OVERRIDE; + virtual ui::EventTargeter* GetEventTargeter() OVERRIDE; // Overridden from ui::EventHandler: virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE; @@ -1090,10 +1085,6 @@ class VIEWS_EXPORT View : public ui::LayerDelegate, // Override to paint a border not specified by SetBorder(). virtual void OnPaintBorder(gfx::Canvas* canvas); - // Override to paint a focus border not specified by set_focus_border() around - // relevant contents. The focus border is usually a dotted rectangle. - virtual void OnPaintFocusBorder(gfx::Canvas* canvas); - // Accelerated painting ------------------------------------------------------ // Returns the offset from this view to the nearest ancestor with a layer. If @@ -1111,12 +1102,11 @@ class VIEWS_EXPORT View : public ui::LayerDelegate, // recurses through all children. This is used when adding a layer to an // existing view to make sure all descendants that have layers are parented to // the right layer. - virtual void MoveLayerToParent(ui::Layer* parent_layer, - const gfx::Point& point); + void MoveLayerToParent(ui::Layer* parent_layer, const gfx::Point& point); // Called to update the bounds of any child layers within this View's // hierarchy when something happens to the hierarchy. - virtual void UpdateChildLayerBounds(const gfx::Vector2d& offset); + void UpdateChildLayerBounds(const gfx::Vector2d& offset); // Overridden from ui::LayerDelegate: virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE; @@ -1514,9 +1504,6 @@ class VIEWS_EXPORT View : public ui::LayerDelegate, // Border. scoped_ptr<Border> border_; - // Focus border. - scoped_ptr<FocusBorder> focus_border_; - // RTL painting -------------------------------------------------------------- // Indicates whether or not the gfx::Canvas object passed to View::Paint() diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc index 964efdfa39..e680160e11 100644 --- a/ui/views/view_unittest.cc +++ b/ui/views/view_unittest.cc @@ -27,7 +27,6 @@ #include "ui/views/controls/textfield/textfield.h" #include "ui/views/focus/accelerator_handler.h" #include "ui/views/focus/view_storage.h" -#include "ui/views/focus_border.h" #include "ui/views/test/views_test_base.h" #include "ui/views/view.h" #include "ui/views/views_delegate.h" @@ -2212,9 +2211,7 @@ TEST_F(ViewTest, FocusBlurPaints) { parent_view.scheduled_paint_rects_.clear(); child_view1->scheduled_paint_rects_.clear(); - // If no FocusBorder is installed then focus changes shouldn't - // SchedulePaint(). - child_view1->set_focus_border(NULL); + // Focus change shouldn't trigger paints. child_view1->DoFocus(); EXPECT_TRUE(parent_view.scheduled_paint_rects_.empty()); @@ -2223,15 +2220,6 @@ TEST_F(ViewTest, FocusBlurPaints) { child_view1->DoBlur(); EXPECT_TRUE(parent_view.scheduled_paint_rects_.empty()); EXPECT_TRUE(child_view1->scheduled_paint_rects_.empty()); - - // Repeat with a FocusBorder, should now paint. - child_view1->set_focus_border(FocusBorder::CreateDashedFocusBorder()); - child_view1->DoFocus(); - EXPECT_FALSE(child_view1->scheduled_paint_rects_.empty()); - child_view1->scheduled_paint_rects_.clear(); - - child_view1->DoBlur(); - EXPECT_FALSE(child_view1->scheduled_paint_rects_.empty()); } // Verifies SetBounds(same bounds) doesn't trigger a SchedulePaint(). @@ -2432,6 +2420,32 @@ TEST_F(ViewTest, ConversionsWithTransform) { } } +// Tests conversion methods to and from screen coordinates. +TEST_F(ViewTest, ConversionsToFromScreen) { + scoped_ptr<Widget> widget(new Widget); + Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); + params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; + params.bounds = gfx::Rect(50, 50, 650, 650); + widget->Init(params); + + View* child = new View; + widget->GetRootView()->AddChildView(child); + child->SetBounds(10, 10, 100, 200); + gfx::Transform t; + t.Scale(0.5, 0.5); + child->SetTransform(t); + + gfx::Point point_in_screen(100, 90); + gfx::Point point_in_child(80,60); + + gfx::Point point = point_in_screen; + View::ConvertPointFromScreen(child, &point); + EXPECT_EQ(point_in_child.ToString(), point.ToString()); + + View::ConvertPointToScreen(child, &point); + EXPECT_EQ(point_in_screen.ToString(), point.ToString()); +} + // Tests conversion methods for rectangles. TEST_F(ViewTest, ConvertRectWithTransform) { scoped_ptr<Widget> widget(new Widget); diff --git a/ui/views/views.gyp b/ui/views/views.gyp index aba39deb7d..e853e765d0 100644 --- a/ui/views/views.gyp +++ b/ui/views/views.gyp @@ -136,6 +136,7 @@ 'controls/menu/menu_model_adapter.h', 'controls/menu/menu_runner.cc', 'controls/menu/menu_runner.h', + 'controls/menu/menu_runner_handler.h', 'controls/menu/menu_scroll_view_container.cc', 'controls/menu/menu_scroll_view_container.h', 'controls/menu/menu_separator.h', @@ -293,8 +294,6 @@ 'focus/view_storage.h', 'focus/widget_focus_manager.cc', 'focus/widget_focus_manager.h', - 'focus_border.cc', - 'focus_border.h', 'ime/input_method_base.cc', 'ime/input_method_base.h', 'ime/input_method_bridge.cc', @@ -343,11 +342,11 @@ 'touchui/touch_selection_controller_impl.h', 'view.cc', 'view.h', + 'view_aura.cc', 'view_constants.cc', 'view_constants.h', 'view_constants_aura.cc', 'view_constants_aura.h', - 'view_aura.cc', 'view_model.cc', 'view_model.h', 'view_model_utils.cc', @@ -499,6 +498,7 @@ ['include', 'controls/menu/native_menu_win.h'], ['include', 'corewm/tooltip_win.cc'], ['include', 'corewm/tooltip_win.h'], + ['include', 'event_utils_win.cc'], ['include', 'widget/desktop_aura/desktop_screen_win.cc'], ['include', 'widget/desktop_aura/desktop_drag_drop_client_win.cc'], ['include', 'widget/desktop_aura/desktop_drop_target_win.cc'], @@ -629,6 +629,8 @@ 'test/child_modal_window.h', 'test/desktop_test_views_delegate.cc', 'test/desktop_test_views_delegate.h', + 'test/menu_runner_test_api.cc', + 'test/menu_runner_test_api.h', 'test/test_views.cc', 'test/test_views.h', 'test/test_views_delegate.cc', @@ -940,6 +942,9 @@ { 'target_name': 'views_examples_exe', 'type': 'executable', + 'dependencies': [ + '../../base/base.gyp:base', + ], 'sources': [ 'examples/examples_main.cc', ], diff --git a/ui/views/views_delegate.h b/ui/views/views_delegate.h index 243ed14439..85fa50b5aa 100644 --- a/ui/views/views_delegate.h +++ b/ui/views/views_delegate.h @@ -89,6 +89,9 @@ class VIEWS_EXPORT ViewsDelegate { #if defined(OS_WIN) // Retrieves the default window icon to use for windows if none is specified. virtual HICON GetDefaultWindowIcon() const = 0; + // Returns true if the window passed in is in the Windows 8 metro + // environment. + virtual bool IsWindowInMetro(gfx::NativeWindow window) const = 0; #elif defined(OS_LINUX) && !defined(OS_CHROMEOS) virtual gfx::ImageSkia* GetDefaultWindowIcon() const = 0; #endif diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc index aa6db8ee19..70ba57a6f9 100644 --- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc +++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc @@ -580,9 +580,10 @@ void DesktopNativeWidgetAura::GetWindowPlacement( desktop_root_window_host_->GetWindowPlacement(bounds, maximized); } -void DesktopNativeWidgetAura::SetWindowTitle(const string16& title) { - if (content_window_) - desktop_root_window_host_->SetWindowTitle(title); +bool DesktopNativeWidgetAura::SetWindowTitle(const string16& title) { + if (!content_window_) + return false; + return desktop_root_window_host_->SetWindowTitle(title); } void DesktopNativeWidgetAura::SetWindowIcons(const gfx::ImageSkia& window_icon, @@ -641,6 +642,8 @@ void DesktopNativeWidgetAura::StackAbove(gfx::NativeView native_view) { } void DesktopNativeWidgetAura::StackAtTop() { + if (content_window_) + desktop_root_window_host_->StackAtTop(); } void DesktopNativeWidgetAura::StackBelow(gfx::NativeView native_view) { diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.h b/ui/views/widget/desktop_aura/desktop_native_widget_aura.h index 9fe207ae74..494dbc41a0 100644 --- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.h +++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.h @@ -113,7 +113,7 @@ class VIEWS_EXPORT DesktopNativeWidgetAura virtual void GetWindowPlacement( gfx::Rect* bounds, ui::WindowShowState* maximized) const OVERRIDE; - virtual void SetWindowTitle(const string16& title) OVERRIDE; + virtual bool SetWindowTitle(const string16& title) OVERRIDE; virtual void SetWindowIcons(const gfx::ImageSkia& window_icon, const gfx::ImageSkia& app_icon) OVERRIDE; virtual void InitModalType(ui::ModalType modal_type) OVERRIDE; diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host.h b/ui/views/widget/desktop_aura/desktop_root_window_host.h index 77c61503f4..c66cee9254 100644 --- a/ui/views/widget/desktop_aura/desktop_root_window_host.h +++ b/ui/views/widget/desktop_aura/desktop_root_window_host.h @@ -84,6 +84,7 @@ class VIEWS_EXPORT DesktopRootWindowHost { virtual bool IsVisible() const = 0; virtual void SetSize(const gfx::Size& size) = 0; + virtual void StackAtTop() = 0; virtual void CenterWindow(const gfx::Size& size) = 0; virtual void GetWindowPlacement(gfx::Rect* bounds, ui::WindowShowState* show_state) const = 0; @@ -111,7 +112,8 @@ class VIEWS_EXPORT DesktopRootWindowHost { virtual void SetAlwaysOnTop(bool always_on_top) = 0; virtual bool IsAlwaysOnTop() const = 0; - virtual void SetWindowTitle(const string16& title) = 0; + // Returns true if the title changed. + virtual bool SetWindowTitle(const string16& title) = 0; virtual void ClearNativeFocus() = 0; diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_win.cc b/ui/views/widget/desktop_aura/desktop_root_window_host_win.cc index 5e5cf4a271..12ca812f0b 100644 --- a/ui/views/widget/desktop_aura/desktop_root_window_host_win.cc +++ b/ui/views/widget/desktop_aura/desktop_root_window_host_win.cc @@ -226,6 +226,10 @@ void DesktopRootWindowHostWin::SetSize(const gfx::Size& size) { message_handler_->SetSize(expanded); } +void DesktopRootWindowHostWin::StackAtTop() { + message_handler_->StackAtTop(); +} + void DesktopRootWindowHostWin::CenterWindow(const gfx::Size& size) { gfx::Size size_in_pixels = gfx::win::DIPToScreenSize(size); message_handler_->CenterWindow(size_in_pixels); @@ -321,8 +325,8 @@ bool DesktopRootWindowHostWin::IsAlwaysOnTop() const { return message_handler_->IsAlwaysOnTop(); } -void DesktopRootWindowHostWin::SetWindowTitle(const string16& title) { - message_handler_->SetTitle(title); +bool DesktopRootWindowHostWin::SetWindowTitle(const string16& title) { + return message_handler_->SetTitle(title); } void DesktopRootWindowHostWin::ClearNativeFocus() { @@ -365,6 +369,11 @@ NonClientFrameView* DesktopRootWindowHostWin::CreateNonClientFrameView() { void DesktopRootWindowHostWin::SetFullscreen(bool fullscreen) { message_handler_->fullscreen_handler()->SetFullscreen(fullscreen); + // TODO(sky): workaround for ScopedFullscreenVisibility showing window + // directly. Instead of this should listen for visibility changes and then + // update window. + if (message_handler_->IsVisible() && !content_window_->TargetVisibility()) + content_window_->Show(); SetWindowTransparency(); } @@ -433,6 +442,8 @@ void DesktopRootWindowHostWin::ToggleFullScreen() { gfx::Rect DesktopRootWindowHostWin::GetBounds() const { // Match the logic in HWNDMessageHandler::ClientAreaSizeChanged(). + if (IsMinimized()) + return gfx::Rect(); gfx::Rect bounds(WidgetSizeIsClientSize() ? message_handler_->GetClientAreaBoundsInScreen() : message_handler_->GetWindowBoundsInScreen()); @@ -820,8 +831,8 @@ bool DesktopRootWindowHostWin::HandleKeyEvent(const ui::KeyEvent& event) { bool DesktopRootWindowHostWin::HandleUntranslatedKeyEvent( const ui::KeyEvent& event) { - scoped_ptr<ui::KeyEvent> duplicate_event(event.Copy()); - return delegate_->OnHostKeyEvent(duplicate_event.get()); + ui::KeyEvent duplicate_event(event); + return delegate_->OnHostKeyEvent(&duplicate_event); } void DesktopRootWindowHostWin::HandleTouchEvent( diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_win.h b/ui/views/widget/desktop_aura/desktop_root_window_host_win.h index 6ac7f6f916..bfe42e160c 100644 --- a/ui/views/widget/desktop_aura/desktop_root_window_host_win.h +++ b/ui/views/widget/desktop_aura/desktop_root_window_host_win.h @@ -59,6 +59,7 @@ class VIEWS_EXPORT DesktopRootWindowHostWin const gfx::Rect& restored_bounds) OVERRIDE; virtual bool IsVisible() const OVERRIDE; virtual void SetSize(const gfx::Size& size) OVERRIDE; + virtual void StackAtTop() OVERRIDE; virtual void CenterWindow(const gfx::Size& size) OVERRIDE; virtual void GetWindowPlacement( gfx::Rect* bounds, @@ -79,7 +80,7 @@ class VIEWS_EXPORT DesktopRootWindowHostWin virtual bool HasCapture() const OVERRIDE; virtual void SetAlwaysOnTop(bool always_on_top) OVERRIDE; virtual bool IsAlwaysOnTop() const OVERRIDE; - virtual void SetWindowTitle(const string16& title) OVERRIDE; + virtual bool SetWindowTitle(const string16& title) OVERRIDE; virtual void ClearNativeFocus() OVERRIDE; virtual Widget::MoveLoopResult RunMoveLoop( const gfx::Vector2d& drag_offset, diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc b/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc index 6efc822b36..545e0cde55 100644 --- a/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc +++ b/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc @@ -135,13 +135,16 @@ DesktopRootWindowHostX11::DesktopRootWindowHostX11( native_widget_delegate_(native_widget_delegate), desktop_native_widget_aura_(desktop_native_widget_aura), content_window_(NULL), - window_parent_(NULL) { + window_parent_(NULL), + custom_window_shape_(NULL) { } DesktopRootWindowHostX11::~DesktopRootWindowHostX11() { root_window_->window()->ClearProperty(kHostForRootWindow); aura::client::SetWindowMoveClient(root_window_->window(), NULL); desktop_native_widget_aura_->OnDesktopRootWindowHostDestroyed(root_window_); + if (custom_window_shape_) + XDestroyRegion(custom_window_shape_); } // static @@ -352,6 +355,10 @@ void DesktopRootWindowHostX11::SetSize(const gfx::Size& size) { NOTIMPLEMENTED(); } +void DesktopRootWindowHostX11::StackAtTop() { + XRaiseWindow(xdisplay_, xwindow_); +} + void DesktopRootWindowHostX11::CenterWindow(const gfx::Size& size) { gfx::Rect parent_bounds = GetWorkAreaBoundsInScreen(); @@ -445,20 +452,16 @@ gfx::Rect DesktopRootWindowHostX11::GetWorkAreaBoundsInScreen() const { } void DesktopRootWindowHostX11::SetShape(gfx::NativeRegion native_region) { - if (native_region) { - Region region = gfx::CreateRegionFromSkRegion(*native_region); - XShapeCombineRegion( - xdisplay_, xwindow_, ShapeBounding, 0, 0, region, false); - XDestroyRegion(region); - } else { - ResetWindowRegion(); - } - + if (custom_window_shape_) + XDestroyRegion(custom_window_shape_); + custom_window_shape_ = gfx::CreateRegionFromSkRegion(*native_region); + ResetWindowRegion(); delete native_region; } void DesktopRootWindowHostX11::Activate() { X11DesktopHandler::get()->ActivateWindow(xwindow_); + native_widget_delegate_->AsWidget()->SetInitialFocus(); } void DesktopRootWindowHostX11::Deactivate() { @@ -492,7 +495,7 @@ void DesktopRootWindowHostX11::Restore() { } bool DesktopRootWindowHostX11::IsMaximized() const { - return (HasWMSpecProperty("_NET_WM_STATE_MAXIMIZED_VERT") || + return (HasWMSpecProperty("_NET_WM_STATE_MAXIMIZED_VERT") && HasWMSpecProperty("_NET_WM_STATE_MAXIMIZED_HORZ")); } @@ -516,9 +519,11 @@ bool DesktopRootWindowHostX11::IsAlwaysOnTop() const { return is_always_on_top_; } -void DesktopRootWindowHostX11::SetWindowTitle(const string16& title) { +bool DesktopRootWindowHostX11::SetWindowTitle(const string16& title) { + if (window_title_ == title) + return false; + window_title_ = title; std::string utf8str = UTF16ToUTF8(title); - XChangeProperty(xdisplay_, xwindow_, atom_cache_.GetAtom("_NET_WM_NAME"), @@ -527,12 +532,12 @@ void DesktopRootWindowHostX11::SetWindowTitle(const string16& title) { PropModeReplace, reinterpret_cast<const unsigned char*>(utf8str.c_str()), utf8str.size()); - // TODO(erg): This is technically wrong. So XStoreName and friends expect // this in Host Portable Character Encoding instead of UTF-8, which I believe // is Compound Text. This shouldn't matter 90% of the time since this is the // fallback to the UTF8 property above. XStoreName(xdisplay_, xwindow_, utf8str.c_str()); + return true; } void DesktopRootWindowHostX11::ClearNativeFocus() { @@ -726,6 +731,8 @@ void DesktopRootWindowHostX11::Show() { base::MessagePumpX11::Current()->BlockUntilWindowMapped(xwindow_); window_mapped_ = true; } + + native_widget_delegate_->AsWidget()->SetInitialFocus(); } void DesktopRootWindowHostX11::Hide() { @@ -1112,7 +1119,25 @@ void DesktopRootWindowHostX11::DispatchMouseEvent(ui::MouseEvent* event) { } } +void DesktopRootWindowHostX11::DispatchTouchEvent(ui::TouchEvent* event) { + if (g_current_capture && g_current_capture != this && + event->type() == ui::ET_TOUCH_PRESSED) { + event->ConvertLocationToTarget(root_window_->window(), + g_current_capture->root_window_->window()); + g_current_capture->delegate_->OnHostTouchEvent(event); + } else { + delegate_->OnHostTouchEvent(event); + } +} + void DesktopRootWindowHostX11::ResetWindowRegion() { + // If a custom window shape was supplied then apply it. + if (custom_window_shape_) { + XShapeCombineRegion( + xdisplay_, xwindow_, ShapeBounding, 0, 0, custom_window_shape_, false); + return; + } + if (!IsMaximized()) { gfx::Path window_mask; views::Widget* widget = native_widget_delegate_->AsWidget(); @@ -1277,17 +1302,17 @@ bool DesktopRootWindowHostX11::Dispatch(const base::NativeEvent& event) { int num_coalesced = 0; switch (type) { - // case ui::ET_TOUCH_MOVED: - // num_coalesced = CoalescePendingMotionEvents(xev, &last_event); - // if (num_coalesced > 0) - // xev = &last_event; - // // fallthrough - // case ui::ET_TOUCH_PRESSED: - // case ui::ET_TOUCH_RELEASED: { - // ui::TouchEvent touchev(xev); - // delegate_->OnHostTouchEvent(&touchev); - // break; - // } + case ui::ET_TOUCH_MOVED: + num_coalesced = ui::CoalescePendingMotionEvents(xev, &last_event); + if (num_coalesced > 0) + xev = &last_event; + // fallthrough + case ui::ET_TOUCH_PRESSED: + case ui::ET_TOUCH_RELEASED: { + ui::TouchEvent touchev(xev); + DispatchTouchEvent(&touchev); + break; + } case ui::ET_MOUSE_MOVED: case ui::ET_MOUSE_DRAGGED: case ui::ET_MOUSE_PRESSED: diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_x11.h b/ui/views/widget/desktop_aura/desktop_root_window_host_x11.h index a9e2db44d7..76a0821a6d 100644 --- a/ui/views/widget/desktop_aura/desktop_root_window_host_x11.h +++ b/ui/views/widget/desktop_aura/desktop_root_window_host_x11.h @@ -5,6 +5,7 @@ #ifndef UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_ROOT_WINDOW_HOST_X11_H_ #define UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_ROOT_WINDOW_HOST_X11_H_ +#include <X11/extensions/shape.h> #include <X11/Xlib.h> // Get rid of a macro from Xlib.h that conflicts with Aura's RootWindow class. @@ -84,6 +85,7 @@ class VIEWS_EXPORT DesktopRootWindowHostX11 : const gfx::Rect& restored_bounds) OVERRIDE; virtual bool IsVisible() const OVERRIDE; virtual void SetSize(const gfx::Size& size) OVERRIDE; + virtual void StackAtTop() OVERRIDE; virtual void CenterWindow(const gfx::Size& size) OVERRIDE; virtual void GetWindowPlacement( gfx::Rect* bounds, @@ -104,7 +106,7 @@ class VIEWS_EXPORT DesktopRootWindowHostX11 : virtual bool HasCapture() const OVERRIDE; virtual void SetAlwaysOnTop(bool always_on_top) OVERRIDE; virtual bool IsAlwaysOnTop() const OVERRIDE; - virtual void SetWindowTitle(const string16& title) OVERRIDE; + virtual bool SetWindowTitle(const string16& title) OVERRIDE; virtual void ClearNativeFocus() OVERRIDE; virtual Widget::MoveLoopResult RunMoveLoop( const gfx::Vector2d& drag_offset, @@ -180,6 +182,11 @@ private: // and dispatch it to that host instead. void DispatchMouseEvent(ui::MouseEvent* event); + // Dispatches a touch event, taking capture into account. If a different host + // has capture, then touch-press events are translated to its coordinate space + // and dispatched to that host instead. + void DispatchTouchEvent(ui::TouchEvent* event); + // Resets the window region for the current widget bounds if necessary. void ResetWindowRegion(); @@ -260,6 +267,9 @@ private: ObserverList<DesktopRootWindowHostObserverX11> observer_list_; + // Copy of custom window shape specified via SetShape(), if any. + ::Region custom_window_shape_; + // The current root window host that has capture. While X11 has something // like Windows SetCapture()/ReleaseCapture(), it is entirely implicit and // there are no notifications when this changes. We need to track this so we @@ -271,6 +281,8 @@ private: // destroyed. static std::list<XID>* open_windows_; + string16 window_title_; + DISALLOW_COPY_AND_ASSIGN(DesktopRootWindowHostX11); }; diff --git a/ui/views/widget/desktop_aura/desktop_screen_x11.cc b/ui/views/widget/desktop_aura/desktop_screen_x11.cc index f17c3f23d9..332b81c59c 100644 --- a/ui/views/widget/desktop_aura/desktop_screen_x11.cc +++ b/ui/views/widget/desktop_aura/desktop_screen_x11.cc @@ -271,9 +271,7 @@ bool DesktopScreenX11::Dispatch(const base::NativeEvent& event) { } else if (event->type - xrandr_event_base_ == RRNotify) { // There's some sort of observer dispatch going on here, but I don't think // it's the screen's? - DLOG(ERROR) << "DesktopScreenX11::Dispatch() -> RRNotify"; - - if (configure_timer_.get()) { + if (configure_timer_.get() && configure_timer_->IsRunning()) { configure_timer_->Reset(); } else { configure_timer_.reset(new base::OneShotTimer<DesktopScreenX11>()); diff --git a/ui/views/widget/drop_target_win.cc b/ui/views/widget/drop_target_win.cc index dfe15f9af2..56b0be1aef 100644 --- a/ui/views/widget/drop_target_win.cc +++ b/ui/views/widget/drop_target_win.cc @@ -33,7 +33,7 @@ DWORD DropTargetWin::OnDragOver(IDataObject* data_object, POINT cursor_position, DWORD effect) { gfx::Point root_view_location(cursor_position.x, cursor_position.y); - View::ConvertPointToTarget(NULL, helper_.root_view(), &root_view_location); + View::ConvertPointFromScreen(helper_.root_view(), &root_view_location); OSExchangeData data(new OSExchangeDataProviderWin(data_object)); int drop_operation = helper_.OnDragOver(data, root_view_location, @@ -50,7 +50,7 @@ DWORD DropTargetWin::OnDrop(IDataObject* data_object, POINT cursor_position, DWORD effect) { gfx::Point root_view_location(cursor_position.x, cursor_position.y); - View::ConvertPointToTarget(NULL, helper_.root_view(), &root_view_location); + View::ConvertPointFromScreen(helper_.root_view(), &root_view_location); OSExchangeData data(new OSExchangeDataProviderWin(data_object)); int drop_operation = ui::DragDropTypes::DropEffectToDragOperation(effect); diff --git a/ui/views/widget/native_widget_aura.cc b/ui/views/widget/native_widget_aura.cc index 17aa7d1b1f..c5c93072aa 100644 --- a/ui/views/widget/native_widget_aura.cc +++ b/ui/views/widget/native_widget_aura.cc @@ -345,9 +345,13 @@ void NativeWidgetAura::GetWindowPlacement( ui::SHOW_STATE_DEFAULT; } -void NativeWidgetAura::SetWindowTitle(const string16& title) { - if (window_) - window_->set_title(title); +bool NativeWidgetAura::SetWindowTitle(const string16& title) { + if (!window_) + return false; + if (window_->title() == title) + return false; + window_->set_title(title); + return true; } void NativeWidgetAura::SetWindowIcons(const gfx::ImageSkia& window_icon, diff --git a/ui/views/widget/native_widget_aura.h b/ui/views/widget/native_widget_aura.h index f43257e69c..c79c003f99 100644 --- a/ui/views/widget/native_widget_aura.h +++ b/ui/views/widget/native_widget_aura.h @@ -79,7 +79,7 @@ class VIEWS_EXPORT NativeWidgetAura virtual void GetWindowPlacement( gfx::Rect* bounds, ui::WindowShowState* maximized) const OVERRIDE; - virtual void SetWindowTitle(const string16& title) OVERRIDE; + virtual bool SetWindowTitle(const string16& title) OVERRIDE; virtual void SetWindowIcons(const gfx::ImageSkia& window_icon, const gfx::ImageSkia& app_icon) OVERRIDE; virtual void InitModalType(ui::ModalType modal_type) OVERRIDE; diff --git a/ui/views/widget/native_widget_private.h b/ui/views/widget/native_widget_private.h index b4b2e3d531..2cee9533a6 100644 --- a/ui/views/widget/native_widget_private.h +++ b/ui/views/widget/native_widget_private.h @@ -151,8 +151,8 @@ class VIEWS_EXPORT NativeWidgetPrivate : public NativeWidget { gfx::Rect* bounds, ui::WindowShowState* show_state) const = 0; - // Sets the NativeWindow title. - virtual void SetWindowTitle(const string16& title) = 0; + // Sets the NativeWindow title. Returns true if the title changed. + virtual bool SetWindowTitle(const string16& title) = 0; // Sets the Window icons. |window_icon| is a 16x16 icon suitable for use in // a title bar. |app_icon| is a larger size for use in the host environment diff --git a/ui/views/widget/native_widget_win.cc b/ui/views/widget/native_widget_win.cc index d0f20a6cc3..afe0973678 100644 --- a/ui/views/widget/native_widget_win.cc +++ b/ui/views/widget/native_widget_win.cc @@ -232,8 +232,8 @@ void NativeWidgetWin::GetWindowPlacement( *bounds = gfx::win::ScreenToDIPRect(*bounds); } -void NativeWidgetWin::SetWindowTitle(const string16& title) { - message_handler_->SetTitle(title); +bool NativeWidgetWin::SetWindowTitle(const string16& title) { + return message_handler_->SetTitle(title); } void NativeWidgetWin::SetWindowIcons(const gfx::ImageSkia& window_icon, diff --git a/ui/views/widget/native_widget_win.h b/ui/views/widget/native_widget_win.h index afe0f539c3..8f27e09cf7 100644 --- a/ui/views/widget/native_widget_win.h +++ b/ui/views/widget/native_widget_win.h @@ -94,7 +94,7 @@ class VIEWS_EXPORT NativeWidgetWin : public internal::NativeWidgetPrivate, virtual void GetWindowPlacement( gfx::Rect* bounds, ui::WindowShowState* show_state) const OVERRIDE; - virtual void SetWindowTitle(const string16& title) OVERRIDE; + virtual bool SetWindowTitle(const string16& title) OVERRIDE; virtual void SetWindowIcons(const gfx::ImageSkia& window_icon, const gfx::ImageSkia& app_icon) OVERRIDE; virtual void InitModalType(ui::ModalType modal_type) OVERRIDE; diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc index 469d4560cb..dc1ace9dab 100644 --- a/ui/views/widget/widget.cc +++ b/ui/views/widget/widget.cc @@ -807,7 +807,8 @@ void Widget::UpdateWindowTitle() { // the native frame is being used, since this also updates the taskbar, etc. string16 window_title = widget_delegate_->GetWindowTitle(); base::i18n::AdjustStringForLocaleDirection(&window_title); - native_widget_->SetWindowTitle(window_title); + if (!native_widget_->SetWindowTitle(window_title)) + return; non_client_view_->UpdateWindowTitle(); // If the non-client view is rendering its own title, it'll need to relayout diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc index c24f2e1925..cb29c4e65d 100644 --- a/ui/views/widget/widget_unittest.cc +++ b/ui/views/widget/widget_unittest.cc @@ -1598,6 +1598,63 @@ TEST_F(WidgetTest, SingleWindowClosing) { EXPECT_EQ(1, delegate->count()); } +class WidgetWindowTitleTest : public WidgetTest { + protected: + void RunTest(bool desktop_native_widget) { + Widget* widget = new Widget(); // Destroyed by CloseNow() below. + Widget::InitParams init_params = + CreateParams(Widget::InitParams::TYPE_WINDOW); + widget->Init(init_params); + +#if defined(USE_AURA) && !defined(OS_CHROMEOS) + if (desktop_native_widget) + init_params.native_widget = new DesktopNativeWidgetAura(widget); +#else + DCHECK(!desktop_native_widget) + << "DesktopNativeWidget does not exist on non-Aura or on ChromeOS."; +#endif + + internal::NativeWidgetPrivate* native_widget = + widget->native_widget_private(); + + string16 empty; + string16 s1(UTF8ToUTF16("Title1")); + string16 s2(UTF8ToUTF16("Title2")); + string16 s3(UTF8ToUTF16("TitleLong")); + + // The widget starts with no title, setting empty should not change + // anything. + EXPECT_FALSE(native_widget->SetWindowTitle(empty)); + // Setting the title to something non-empty should cause a change. + EXPECT_TRUE(native_widget->SetWindowTitle(s1)); + // Setting the title to something else with the same length should cause a + // change. + EXPECT_TRUE(native_widget->SetWindowTitle(s2)); + // Setting the title to something else with a different length should cause + // a change. + EXPECT_TRUE(native_widget->SetWindowTitle(s3)); + // Setting the title to the same thing twice should not cause a change. + EXPECT_FALSE(native_widget->SetWindowTitle(s3)); + + widget->CloseNow(); + } +}; + +TEST_F(WidgetWindowTitleTest, SetWindowTitleChanged_NativeWidget) { + // Use the default NativeWidget. + bool desktop_native_widget = false; + RunTest(desktop_native_widget); +} + +// DesktopNativeWidget does not exist on non-Aura or on ChromeOS. +#if defined(USE_AURA) && !defined(OS_CHROMEOS) +TEST_F(WidgetWindowTitleTest, SetWindowTitleChanged_DesktopNativeWidget) { + // Override to use a DesktopNativeWidget. + bool desktop_native_widget = true; + RunTest(desktop_native_widget); +} +#endif // USE_AURA && !OS_CHROMEOS + // Used by SetTopLevelCorrectly to track calls to OnBeforeWidgetInit(). class VerifyTopLevelDelegate : public TestViewsDelegate { public: @@ -2055,6 +2112,39 @@ TEST_F(WidgetTest, WindowMouseModalityTest) { top_level_widget.CloseNow(); } +#if defined(USE_AURA) +// Verifies nativeview visbility matches that of Widget visibility when +// SetFullscreen is invoked. +TEST_F(WidgetTest, FullscreenStatePropagated) { + Widget::InitParams init_params = + CreateParams(Widget::InitParams::TYPE_WINDOW); + init_params.show_state = ui::SHOW_STATE_NORMAL; + init_params.bounds = gfx::Rect(0, 0, 500, 500); + init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; + + { + Widget top_level_widget; + top_level_widget.Init(init_params); + top_level_widget.SetFullscreen(true); + EXPECT_EQ(top_level_widget.IsVisible(), + top_level_widget.GetNativeView()->IsVisible()); + top_level_widget.CloseNow(); + } + +#if !defined(OS_CHROMEOS) + { + Widget top_level_widget; + init_params.native_widget = new DesktopNativeWidgetAura(&top_level_widget); + top_level_widget.Init(init_params); + top_level_widget.SetFullscreen(true); + EXPECT_EQ(top_level_widget.IsVisible(), + top_level_widget.GetNativeView()->IsVisible()); + top_level_widget.CloseNow(); + } +#endif +} +#endif + #if defined(OS_WIN) // Provides functionality to test widget activation via an activation flag diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc index 9eede1ddf5..1c25faf15e 100644 --- a/ui/views/win/hwnd_message_handler.cc +++ b/ui/views/win/hwnd_message_handler.cc @@ -377,6 +377,7 @@ HWNDMessageHandler::HWNDMessageHandler(HWNDMessageHandlerDelegate* delegate) use_system_default_icon_(false), restore_focus_when_enabled_(false), restored_enabled_(false), + current_cursor_(NULL), previous_cursor_(NULL), active_mouse_tracking_flags_(0), is_right_mouse_pressed_on_caption_(false), @@ -386,7 +387,6 @@ HWNDMessageHandler::HWNDMessageHandler(HWNDMessageHandlerDelegate* delegate) use_layered_buffer_(false), layered_alpha_(255), waiting_for_redraw_layered_window_contents_(false), - can_update_layered_window_(true), is_first_nccalc_(true), autohide_factory_(this), id_generator_(0) { @@ -543,7 +543,8 @@ void HWNDMessageHandler::CenterWindow(const gfx::Size& size) { } void HWNDMessageHandler::SetRegion(HRGN region) { - SetWindowRgn(hwnd(), region, TRUE); + custom_window_region_.Set(region); + ResetWindowRegion(false, true); } void HWNDMessageHandler::StackAbove(HWND other_hwnd) { @@ -752,13 +753,24 @@ void HWNDMessageHandler::SetVisibilityChangedAnimationsEnabled(bool enabled) { } } -void HWNDMessageHandler::SetTitle(const string16& title) { +bool HWNDMessageHandler::SetTitle(const string16& title) { + string16 current_title; + size_t len_with_null = GetWindowTextLength(hwnd()) + 1; + if (len_with_null == 1 && title.length() == 0) + return false; + if (len_with_null - 1 == title.length() && + GetWindowText( + hwnd(), WriteInto(¤t_title, len_with_null), len_with_null) && + current_title == title) + return false; SetWindowText(hwnd(), title.c_str()); + return true; } void HWNDMessageHandler::SetCursor(HCURSOR cursor) { if (cursor) { previous_cursor_ = ::SetCursor(cursor); + current_cursor_ = cursor; } else if (previous_cursor_) { ::SetCursor(previous_cursor_); previous_cursor_ = NULL; @@ -768,17 +780,9 @@ void HWNDMessageHandler::SetCursor(HCURSOR cursor) { void HWNDMessageHandler::FrameTypeChanged() { // Called when the frame type could possibly be changing (theme change or // DWM composition change). - if (base::win::GetVersion() >= base::win::VERSION_VISTA) { - // We need to toggle the rendering policy of the DWM/glass frame as we - // change from opaque to glass. "Non client rendering enabled" means that - // the DWM's glass non-client rendering is enabled, which is why - // DWMNCRP_ENABLED is used for the native frame case. _DISABLED means the - // DWM doesn't render glass, and so is used in the custom frame case. - DWMNCRENDERINGPOLICY policy = !delegate_->IsUsingCustomFrame() ? - DWMNCRP_ENABLED : DWMNCRP_DISABLED; - DwmSetWindowAttribute(hwnd(), DWMWA_NCRENDERING_POLICY, - &policy, sizeof(DWMNCRENDERINGPOLICY)); - } + + // Update rendering of the DWM/glass frame depending on the new frame type. + UpdateDwmNcRenderingPolicy(); // Don't redraw the window here, because we need to hide and show the window // which will also trigger a redraw. @@ -1099,7 +1103,7 @@ void HWNDMessageHandler::ResetWindowRegion(bool force, bool redraw) { // automatically makes clicks on transparent pixels fall through, that isn't // the case with WS_EX_COMPOSITED. So, we route WS_EX_COMPOSITED through to // the delegate to allow for a custom hit mask. - if ((window_ex_style() & WS_EX_COMPOSITED) == 0 && + if ((window_ex_style() & WS_EX_COMPOSITED) == 0 && !custom_window_region_ && (!delegate_->IsUsingCustomFrame() || !delegate_->IsWidgetWindow())) { if (force) SetWindowRgn(hwnd(), NULL, redraw); @@ -1114,7 +1118,10 @@ void HWNDMessageHandler::ResetWindowRegion(bool force, bool redraw) { CRect window_rect; GetWindowRect(hwnd(), &window_rect); HRGN new_region; - if (IsMaximized()) { + if (custom_window_region_) { + new_region = ::CreateRectRgn(0, 0, 0, 0); + ::CombineRgn(new_region, custom_window_region_.Get(), NULL, RGN_COPY); + } else if (IsMaximized()) { HMONITOR monitor = MonitorFromWindow(hwnd(), MONITOR_DEFAULTTONEAREST); MONITORINFO mi; mi.cbSize = sizeof mi; @@ -1139,6 +1146,16 @@ void HWNDMessageHandler::ResetWindowRegion(bool force, bool redraw) { DeleteObject(current_rgn); } +void HWNDMessageHandler::UpdateDwmNcRenderingPolicy() { + if (base::win::GetVersion() < base::win::VERSION_VISTA) + return; + DWMNCRENDERINGPOLICY policy = DWMNCRP_ENABLED; + if (remove_standard_frame_ || delegate_->IsUsingCustomFrame()) + policy = DWMNCRP_DISABLED; + DwmSetWindowAttribute(hwnd(), DWMWA_NCRENDERING_POLICY, + &policy, sizeof(DWMNCRENDERINGPOLICY)); +} + LRESULT HWNDMessageHandler::DefWindowProcWithRedrawLock(UINT message, WPARAM w_param, LPARAM l_param) { @@ -1297,6 +1314,7 @@ LRESULT HWNDMessageHandler::OnCreate(CREATESTRUCT* create_struct) { 0); if (remove_standard_frame_) { + UpdateDwmNcRenderingPolicy(); SetWindowLong(hwnd(), GWL_STYLE, GetWindowLong(hwnd(), GWL_STYLE) & ~WS_CAPTION); SendFrameChanged(); @@ -1461,6 +1479,17 @@ LRESULT HWNDMessageHandler::OnMouseActivate(UINT message, WPARAM w_param, LPARAM l_param) { #if defined(USE_AURA) + // On Windows, if we select the menu item by touch and if the window at the + // location is another window on the same thread, that window gets a + // WM_MOUSEACTIVATE message and ends up activating itself, which is not + // correct. We workaround this by setting a property on the window at the + // current cursor location. We check for this property in our + // WM_MOUSEACTIVATE handler and don't activate the window if the property is + // set. + if (::GetProp(hwnd(), kIgnoreTouchMouseActivateForWindow)) { + ::RemoveProp(hwnd(), kIgnoreTouchMouseActivateForWindow); + return MA_NOACTIVATE; + } // A child window activation should be treated as if we lost activation. POINT cursor_pos = {0}; ::GetCursorPos(&cursor_pos); @@ -1952,14 +1981,14 @@ LRESULT HWNDMessageHandler::OnSetCursor(UINT message, cursor = IDC_SIZENESW; break; case HTCLIENT: - // Client-area mouse events set the proper cursor from View::GetCursor. - return 0; + SetCursor(current_cursor_); + return 1; default: // Use the default value, IDC_ARROW. break; } - SetCursor(LoadCursor(NULL, cursor)); - return 0; + ::SetCursor(LoadCursor(NULL, cursor)); + return 1; } void HWNDMessageHandler::OnSetFocus(HWND last_focused_window) { @@ -2213,7 +2242,8 @@ void HWNDMessageHandler::OnWindowPosChanged(WINDOWPOS* window_pos) { } void HWNDMessageHandler::HandleTouchEvents(const TouchEvents& touch_events) { - for (size_t i = 0; i < touch_events.size(); ++i) + base::WeakPtr<HWNDMessageHandler> ref(weak_factory_.GetWeakPtr()); + for (size_t i = 0; i < touch_events.size() && ref; ++i) delegate_->HandleTouchEvent(touch_events[i]); } diff --git a/ui/views/win/hwnd_message_handler.h b/ui/views/win/hwnd_message_handler.h index d08fbd8cc9..9bcec62bf2 100644 --- a/ui/views/win/hwnd_message_handler.h +++ b/ui/views/win/hwnd_message_handler.h @@ -19,6 +19,7 @@ #include "base/memory/weak_ptr.h" #include "base/message_loop/message_loop.h" #include "base/strings/string16.h" +#include "base/win/scoped_gdi_object.h" #include "base/win/win_util.h" #include "ui/base/accessibility/accessibility_types.h" #include "ui/base/ui_base_types.h" @@ -174,16 +175,13 @@ class VIEWS_EXPORT HWNDMessageHandler : void SetVisibilityChangedAnimationsEnabled(bool enabled); - void SetTitle(const string16& title); + // Returns true if the title changed. + bool SetTitle(const string16& title); void SetCursor(HCURSOR cursor); void FrameTypeChanged(); - // Disable Layered Window updates by setting to false. - void set_can_update_layered_window(bool can_update_layered_window) { - can_update_layered_window_ = can_update_layered_window; - } void SchedulePaintInRect(const gfx::Rect& rect); void SetOpacity(BYTE opacity); @@ -254,6 +252,11 @@ class VIEWS_EXPORT HWNDMessageHandler : // frame windows. void ResetWindowRegion(bool force, bool redraw); + // Enables or disables rendering of the non-client (glass) area by DWM, + // under Vista and above, depending on whether the caller has requested a + // custom frame. + void UpdateDwmNcRenderingPolicy(); + // Calls DefWindowProc, safely wrapping the call in a ScopedRedrawLock to // prevent frame flicker. DefWindowProc handling can otherwise render the // classic-look window title bar directly. @@ -440,6 +443,9 @@ class VIEWS_EXPORT HWNDMessageHandler : // true. bool restored_enabled_; + // The current cursor. + HCURSOR current_cursor_; + // The last cursor that was active before the current one was selected. Saved // so that we can restore it. HCURSOR previous_cursor_; @@ -509,13 +515,12 @@ class VIEWS_EXPORT HWNDMessageHandler : // Set to true when waiting for RedrawLayeredWindowContents(). bool waiting_for_redraw_layered_window_contents_; - // True if we are allowed to update the layered window from the DIB backing - // store if necessary. - bool can_update_layered_window_; - // True the first time nccalc is called on a sizable widget bool is_first_nccalc_; + // Copy of custom window region specified via SetRegion(), if any. + base::win::ScopedRegion custom_window_region_; + // A factory used to lookup appbar autohide edges. base::WeakPtrFactory<HWNDMessageHandler> autohide_factory_; @@ -525,6 +530,11 @@ class VIEWS_EXPORT HWNDMessageHandler : DISALLOW_COPY_AND_ASSIGN(HWNDMessageHandler); }; +// This window property if set on the window does not activate the window for a +// touch based WM_MOUSEACTIVATE message. +const wchar_t kIgnoreTouchMouseActivateForWindow[] = + L"Chrome.IgnoreMouseActivate"; + } // namespace views #endif // UI_VIEWS_WIN_HWND_MESSAGE_HANDLER_H_ diff --git a/ui/views/window/custom_frame_view.cc b/ui/views/window/custom_frame_view.cc index 838a79c83f..313e88ca83 100644 --- a/ui/views/window/custom_frame_view.cc +++ b/ui/views/window/custom_frame_view.cc @@ -388,54 +388,68 @@ void CustomFrameView::PaintRestoredClientEdge(gfx::Canvas* canvas) { int client_area_top = client_area_bounds.y(); ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); - const gfx::ImageSkia* top_left = rb.GetImageNamed( - IDR_APP_TOP_LEFT).ToImageSkia(); - const gfx::ImageSkia* top = rb.GetImageNamed( - IDR_APP_TOP_CENTER).ToImageSkia(); - const gfx::ImageSkia* top_right = rb.GetImageNamed( - IDR_APP_TOP_RIGHT).ToImageSkia(); - const gfx::ImageSkia* right = rb.GetImageNamed( - IDR_CONTENT_RIGHT_SIDE).ToImageSkia(); - const gfx::ImageSkia* bottom_right = rb.GetImageNamed( - IDR_CONTENT_BOTTOM_RIGHT_CORNER).ToImageSkia(); - const gfx::ImageSkia* bottom = rb.GetImageNamed( - IDR_CONTENT_BOTTOM_CENTER).ToImageSkia(); - const gfx::ImageSkia* bottom_left = rb.GetImageNamed( - IDR_CONTENT_BOTTOM_LEFT_CORNER).ToImageSkia(); - const gfx::ImageSkia* left = rb.GetImageNamed( - IDR_CONTENT_LEFT_SIDE).ToImageSkia(); - - // Top. - int top_edge_y = client_area_top - top->height(); - canvas->DrawImageInt(*top_left, client_area_bounds.x() - top_left->width(), + + // Top: left, center, right sides. + const gfx::ImageSkia* top_left = rb.GetImageSkiaNamed(IDR_APP_TOP_LEFT); + const gfx::ImageSkia* top_center = rb.GetImageSkiaNamed(IDR_APP_TOP_CENTER); + const gfx::ImageSkia* top_right = rb.GetImageSkiaNamed(IDR_APP_TOP_RIGHT); + int top_edge_y = client_area_top - top_center->height(); + canvas->DrawImageInt(*top_left, + client_area_bounds.x() - top_left->width(), top_edge_y); - canvas->TileImageInt(*top, client_area_bounds.x(), top_edge_y, - client_area_bounds.width(), top->height()); + canvas->TileImageInt(*top_center, + client_area_bounds.x(), + top_edge_y, + client_area_bounds.width(), + top_center->height()); canvas->DrawImageInt(*top_right, client_area_bounds.right(), top_edge_y); - // Right. + // Right side. + const gfx::ImageSkia* right = rb.GetImageSkiaNamed(IDR_CONTENT_RIGHT_SIDE); int client_area_bottom = std::max(client_area_top, client_area_bounds.bottom()); int client_area_height = client_area_bottom - client_area_top; - canvas->TileImageInt(*right, client_area_bounds.right(), client_area_top, - right->width(), client_area_height); + canvas->TileImageInt(*right, + client_area_bounds.right(), + client_area_top, + right->width(), + client_area_height); + + // Bottom: left, center, right sides. + const gfx::ImageSkia* bottom_left = + rb.GetImageSkiaNamed(IDR_CONTENT_BOTTOM_LEFT_CORNER); + const gfx::ImageSkia* bottom_center = + rb.GetImageSkiaNamed(IDR_CONTENT_BOTTOM_CENTER); + const gfx::ImageSkia* bottom_right = + rb.GetImageSkiaNamed(IDR_CONTENT_BOTTOM_RIGHT_CORNER); - // Bottom. - canvas->DrawImageInt(*bottom_right, client_area_bounds.right(), - client_area_bottom); - canvas->TileImageInt(*bottom, client_area_bounds.x(), client_area_bottom, - client_area_bounds.width(), bottom_right->height()); canvas->DrawImageInt(*bottom_left, - client_area_bounds.x() - bottom_left->width(), client_area_bottom); + client_area_bounds.x() - bottom_left->width(), + client_area_bottom); + + canvas->TileImageInt(*bottom_center, + client_area_bounds.x(), + client_area_bottom, + client_area_bounds.width(), + bottom_right->height()); - // Left. - canvas->TileImageInt(*left, client_area_bounds.x() - left->width(), - client_area_top, left->width(), client_area_height); + canvas->DrawImageInt(*bottom_right, + client_area_bounds.right(), + client_area_bottom); + // Left side. + const gfx::ImageSkia* left = rb.GetImageSkiaNamed(IDR_CONTENT_LEFT_SIDE); + canvas->TileImageInt(*left, + client_area_bounds.x() - left->width(), + client_area_top, + left->width(), + client_area_height); // Draw the color to fill in the edges. - canvas->FillRect(gfx::Rect(client_area_bounds.x() - 1, client_area_top - 1, - client_area_bounds.width() + 1, client_area_bottom - client_area_top + 1), - kClientEdgeColor); + canvas->FillRect(gfx::Rect(client_area_bounds.x() - 1, + client_area_top - 1, + client_area_bounds.width() + 1, + client_area_bottom - client_area_top + 1), + kClientEdgeColor); } SkColor CustomFrameView::GetFrameColor() const { diff --git a/ui/views/window/dialog_client_view.cc b/ui/views/window/dialog_client_view.cc index 643d6de071..eb83230e05 100644 --- a/ui/views/window/dialog_client_view.cc +++ b/ui/views/window/dialog_client_view.cc @@ -7,6 +7,7 @@ #include <algorithm> #include "ui/events/keycodes/keyboard_codes.h" +#include "ui/views/background.h" #include "ui/views/controls/button/blue_button.h" #include "ui/views/controls/button/label_button.h" #include "ui/views/layout/layout_constants.h" diff --git a/ui/web_dialogs/web_dialog_delegate.cc b/ui/web_dialogs/web_dialog_delegate.cc index ed414101ab..d3688e04cb 100644 --- a/ui/web_dialogs/web_dialog_delegate.cc +++ b/ui/web_dialogs/web_dialog_delegate.cc @@ -14,6 +14,10 @@ void WebDialogDelegate::GetMinimumDialogSize(gfx::Size* size) const { GetDialogSize(size); } +bool WebDialogDelegate::CanCloseDialog() const { + return true; +} + void WebDialogDelegate::OnDialogCloseFromWebUI( const std::string& json_retval) { OnDialogClosed(json_retval); diff --git a/ui/web_dialogs/web_dialog_delegate.h b/ui/web_dialogs/web_dialog_delegate.h index 8416c1f15e..2bd772f018 100644 --- a/ui/web_dialogs/web_dialog_delegate.h +++ b/ui/web_dialogs/web_dialog_delegate.h @@ -63,6 +63,12 @@ class WEB_DIALOGS_EXPORT WebDialogDelegate { // Gets the JSON string input to use when showing the dialog. virtual std::string GetDialogArgs() const = 0; + // Returns true to signal that the dialog can be closed. Specialized + // WebDialogDelegate subclasses can override this default behavior to allow + // the close to be blocked until the user corrects mistakes, accepts an + // agreement, etc. + virtual bool CanCloseDialog() const; + // A callback to notify the delegate that |source|'s loading state has // changed. virtual void OnLoadingStateChanged(content::WebContents* source) {} diff --git a/ui/webui/resources/js/cr/ui/autocomplete_list.js b/ui/webui/resources/js/cr/ui/autocomplete_list.js index 6dd04f3717..378e7c6830 100644 --- a/ui/webui/resources/js/cr/ui/autocomplete_list.js +++ b/ui/webui/resources/js/cr/ui/autocomplete_list.js @@ -173,6 +173,14 @@ cr.define('cr.ui', function() { input.addEventListener('keydown', this.textFieldKeyHandler_, true); input.addEventListener('input', this.textFieldInputHandler_); + + if (!this.boundSyncWidthAndPositionToInput_) { + this.boundSyncWidthAndPositionToInput_ = + this.syncWidthAndPositionToInput.bind(this); + } + // We need to call syncWidthAndPositionToInput whenever page zoom level or + // page size is changed. + window.addEventListener('resize', this.boundSyncWidthAndPositionToInput_); }, /** @@ -187,6 +195,10 @@ cr.define('cr.ui', function() { input.removeEventListener('input', this.textFieldInputHandler_); this.targetInput_ = null; this.suggestions = []; + if (this.boundSyncWidthAndPositionToInput_) { + window.removeEventListener( + 'resize', this.boundSyncWidthAndPositionToInput_); + } }, /** @@ -203,6 +215,13 @@ cr.define('cr.ui', function() { }, /** + * syncWidthAndPositionToInput function bound to |this|. + * @type {Function} + * @private + */ + boundSyncWidthAndPositionToInput_: undefined, + + /** * @return {HTMLElement} The text field the autocomplete popup is currently * attached to, if any. */ diff --git a/ui/webui/resources/js/cr/ui/command.js b/ui/webui/resources/js/cr/ui/command.js index 540db042f0..e06cd68577 100644 --- a/ui/webui/resources/js/cr/ui/command.js +++ b/ui/webui/resources/js/cr/ui/command.js @@ -186,6 +186,17 @@ cr.define('cr.ui', function() { cr.defineProperty(Command, 'checked', cr.PropertyKind.BOOL_ATTR); /** + * The flag that prevents the shortcut text from being displayed on menu. + * + * If false, the keyboard shortcut text (eg. "Ctrl+X" for the cut command) + * is displayed in menu when the command is assosiated with a menu item. + * Otherwise, no text is displayed. + * + * @type {boolean} + */ + cr.defineProperty(Command, 'hideShortcutText', cr.PropertyKind.BOOL_ATTR); + + /** * Dispatches a canExecute event on the target. * @param {cr.ui.Command} command The command that we are testing for. * @param {Element} target The target element to dispatch the event on. diff --git a/ui/webui/resources/js/cr/ui/list.js b/ui/webui/resources/js/cr/ui/list.js index 6377273124..1dc38b6dc2 100644 --- a/ui/webui/resources/js/cr/ui/list.js +++ b/ui/webui/resources/js/cr/ui/list.js @@ -711,6 +711,11 @@ cr.define('cr.ui', function() { var top = this.getItemTop(index); var clientHeight = this.clientHeight; + var cs = getComputedStyle(this); + var paddingY = parseInt(cs.paddingTop, 10) + + parseInt(cs.paddingBottom, 10); + var availableHeight = clientHeight - paddingY; + var self = this; // Function to adjust the tops of viewport and row. function scrollToAdjustTop() { @@ -719,27 +724,20 @@ cr.define('cr.ui', function() { }; // Function to adjust the bottoms of viewport and row. function scrollToAdjustBottom() { - var cs = getComputedStyle(self); - var paddingY = parseInt(cs.paddingTop, 10) + - parseInt(cs.paddingBottom, 10); - - if (top + itemHeight > scrollTop + clientHeight - paddingY) { - self.scrollTop = top + itemHeight - clientHeight + paddingY; - return true; - } - return false; + self.scrollTop = top + itemHeight - availableHeight; + return true; }; // Check if the entire of given indexed row can be shown in the viewport. - if (itemHeight <= clientHeight) { + if (itemHeight <= availableHeight) { if (top < scrollTop) return scrollToAdjustTop(); - if (scrollTop + clientHeight < top + itemHeight) + if (scrollTop + availableHeight < top + itemHeight) return scrollToAdjustBottom(); } else { if (scrollTop < top) return scrollToAdjustTop(); - if (top + itemHeight < scrollTop + clientHeight) + if (top + itemHeight < scrollTop + availableHeight) return scrollToAdjustBottom(); } return false; @@ -1300,24 +1298,23 @@ cr.define('cr.ui', function() { // // [1] For example, clicking non-focusable area gives focus on the first // form control in the item. - if (!tryFocusOnAncestor(e.target, listItem) && + if (!containsFocusableElement(e.target, listItem) && listItem.contains(listItem.ownerDocument.activeElement)) { e.preventDefault(); } } /** - * Try focusing on |eventTarget| or its ancestor under |root|. + * Check if |start| or its ancestor under |root| is focusable. * This is a helper for handleMouseDown. - * @param {!Element} start An element which we start to try. - * @param {!Element} root An element which we finish to try. - * @return {boolean} True if we focused on an element successfully. + * @param {!Element} start An element which we start to check. + * @param {!Element} root An element which we finish to check. + * @return {boolean} True if we found a focusable element. */ - function tryFocusOnAncestor(start, root) { + function containsFocusableElement(start, root) { for (var element = start; element && element != root; element = element.parentElement) { - element.focus(); - if (root.ownerDocument.activeElement == element) + if (element.tabIndex >= 0 && !element.disabled) return true; } return false; diff --git a/ui/webui/resources/js/cr/ui/menu_item.js b/ui/webui/resources/js/cr/ui/menu_item.js index 89054e2ccb..9adb83dbd6 100644 --- a/ui/webui/resources/js/cr/ui/menu_item.js +++ b/ui/webui/resources/js/cr/ui/menu_item.js @@ -128,7 +128,9 @@ cr.define('cr.ui', function() { updateShortcut_: function() { this.removeAttribute('shortcutText'); - if (!(this.command_ && this.command_.shortcut)) + if (!this.command_ || + !this.command_.shortcut || + this.command_.hideShortcutText) return; var shortcuts = this.command_.shortcut.split(/\s+/); diff --git a/ui/webui/resources/js/util.js b/ui/webui/resources/js/util.js index 1fc1364858..caf421e385 100644 --- a/ui/webui/resources/js/util.js +++ b/ui/webui/resources/js/util.js @@ -120,6 +120,26 @@ function parseQueryParams(location) { return params; } +/** + * Creates a new URL by appending or replacing the given query key and value. + * Not supporting URL with username and password. + * @param {object} location The original URL. + * @param {string} key The query parameter name. + * @param {string} value The query parameter value. + * @return {string} The constructed new URL. + */ +function setQueryParam(location, key, value) { + var query = parseQueryParams(location); + query[encodeURIComponent(key)] = encodeURIComponent(value); + + var newQuery = ''; + for (var q in query) { + newQuery += (newQuery ? '&' : '?') + q + '=' + query[q]; + } + + return location.origin + location.pathname + newQuery + location.hash; +} + function findAncestorByClass(el, className) { return findAncestor(el, function(el) { if (el.classList) |